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),它抛出错误的原因是因为它在您的层次结构中太低了一级。您想在“桶”级别分配它,而不是“水果”级别:

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 回答