python - 在另一个defaultdict(树)中动态创建defaultdict(列表)

标签 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 对象合并到一起吗? 有人可以帮我解决这个问题吗?

谢谢。

最佳答案

鉴于您想要的输出,我认为您根本不需要使用 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/

相关文章:

python - 如何不使用 __init__.py 作为 Flask 应用程序名称?

list - pythonic方式来分割列表?

c++ - 按类中的特定变量搜索

c++ - 为 STL 迭代器重载运算符->

python - 如何修复 'TypeError: cannot convert dictionary update sequence element #0 to a sequence'

python - 在 Numpy 中乘积 block 矩阵

python - Python的MemoryView底层机制

c# - 列表包含字典包含列表

python - web2py 在未来?

python - 如何将列表转换为 python 中的计数器对象