我已经为此奋斗了很长一段时间,需要一些帮助,我有一些循环搜索某些内容并为它们动态创建字典对象,例如我正在扫描商店,然后扫描所有桶,然后扫描里面的水果那些桶。
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 对象合并到一起吗? 有人可以帮我解决这个问题吗?
谢谢。
最佳答案
鉴于您想要的输出,我认为您根本不需要使用 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
关于python - 在另一个defaultdict(树)中动态创建defaultdict(列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18866519/