我一直在与这个斗争很长一段时间并且需要一些帮助,我有一些循环搜索一些东西并为它们动态创建字典对象,例如我正在扫描一个商店然后所有的桶然后里面的水果那些桶。
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对象合并在一起。 有人可以帮我这个。
感谢。
答案 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