1

私はかなり長い間これと戦ってきましたが、助けが必要です。何かを検索するループがいくつかあり、それらの辞書オブジェクトを動的に作成します。たとえば、ストアをスキャンしてからすべてのバケットをスキャンし、次にそれらのバケット内の果物をスキャンしています。

from collections import defaultdict


def tree(): return defaultdict(tree)

test = tree()

test[Store][bucket][fruits] = defaultdict(list)

test[Store][bucket][fruits].append(1)

print test

"""
desired output

{
    'Store':{
        'bucket1':{
            'fruits':['banana', 'mango', 'apple']
            }
        },
        'bucket2':{
            'fruits':['banana', 'mango', 'apple']
            }
        }
}
"""

このアプローチはエラーをスローして機能しません。別の辞書を作成してからそれらをマージする、またはリストを作成してから検索または検索して何とか何とかするなど、他の多くのアプローチも試しました..しかし、どのようにマージできるかを知りたい互いの内部の defaultdict オブジェクト。誰かがこれで私を助けてくれますか。

ありがとう。

4

1 に答える 1

4

希望する出力を考えると、まったく使用する必要はないと思いますdefaultdict(list)

代わりに、通常のリストを使用できます。

from collections import defaultdict

def tree(): 
    return defaultdict(tree)

test = tree()

test['Store']['bucket']['fruits'] = []
test['Store']['bucket']['fruits'].append(1)
test['Store']['bucket-13']['fruits'] = ['mango', 'apple', 'banana']

print test

ただし、 を使用したい場合defaultdict(list)、エラーがスローされる理由は、階層内で 1 レベル低すぎるためです。「フルーツ」レベルではなく、「バケット」レベルで割り当てたいとします。

test = tree()

test['Store']['bucket'] = defaultdict(list)

test['Store']['bucket']['fruit'].append('mango')  
test['Store']['bucket']['meat'].append('chicken') 

# 'fruit' and 'meat' now default to an empty list
于 2013-09-18T08:02:19.423 に答える