在另一个defaultdict(tree)中动态创建defaultdict(list)

时间:2013-09-18 07:44:53

标签: python list dictionary defaultdict

我一直在与这个斗争很长一段时间并且需要一些帮助,我有一些循环搜索一些东西并为它们动态创建字典对象,例如我正在扫描一个商店然后所有的桶然后里面的水果那些桶。

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对象合并在一起。 有人可以帮我这个。

感谢。

1 个答案:

答案 0 :(得分:3)

根据您想要的输出,我认为您根本不需要使用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),那么它之所以抛出错误,是因为它在层次结构中的级别太低了。您想要在“桶”级别分配它,而不是“水果”级别:

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