gpt4 book ai didi

python - 递归collections.defaultdict初始化

转载 作者:行者123 更新时间:2023-12-01 08:28:03 24 4
gpt4 key购买 nike

我的目标是,给定一个我称为datainit的Python字典,创建一个我称为data的递归collections.defaultdict,比如因为 data 是用 datainit 初始化的,并且 data 可以使用缺少键的任何路径进行扩展,如下图

from collections import *
datainit={'number':1}
data =something_with(defaultdict(), datainit)
data['A']['B']['C']=3
#At this stage, I want:
#data['A']['B']['C'] ==3
#data['number'] == 1
#and nothing else.

从空字典开始执行此操作的正常方法是,例如:

nested_dict = lambda: defaultdict(nested_dict)
data = nested_dict()

尝试:

nested_dict = lambda: defaultdict(nested_dict, datainit)
data = nested_dict()

从逻辑上讲,将导致我的 datainit 为每个丢失的键重复:

>>> datainit={'number':1}
>>> nested_dict = lambda: defaultdict(nested_dict, datainit)
>>> data=nested_dict()
>>> data
defaultdict(<function <lambda> at 0x7f58e5323758>, {'number': 1})
>>> data['A']['B']['C']=2
>>> data
defaultdict(<function <lambda> at 0x7f58e5323758>, {'A': defaultdict(<function <lambda> at 0x7f58e5323758>, {'B': defaultdict(<function <lambda> at 0x7f58e5323758>, {'C': 2, 'number': 1}), 'number': 1}),
'number': 1})

所有这些都是有道理的,但是我该如何从初始字典开始,然后为每个丢失的键使用一个空字典呢?我的 something_with(defaultdict(), datainit) 应该是什么

可能很明显,但我看不到!

最佳答案

你有两层;顶级 defaultdict,它必须有 number 键,以及一系列任意嵌套的字典,但不能有。您的错误是尝试将它们视为一个,并且尝试将'number'视为缺失值工厂应该处理的内容。

只需在顶部字典中设置number键即可。只有一个这样的键,带有一个值,并且它不应该由 defaultdict() 工厂处理。工厂为任意缺少的键提供默认值,数字不是任意键。

from collections import defaultdict

def topleveldict():
nested_dict = lambda *a, **kw: defaultdict(nested_dict, *a, **kw)
return nested_dict(number=1) # or nested_dict({'number': 1})

data = topleveldict()

仅当您计划在代码库中的多个位置创建结构时才需要 topleveldict() 函数。如果只有一个这样的对象,或者只有一个地方创建这些对象,那么只需从该函数内联代码即可:

nested_dict = lambda *a, **kw: defaultdict(nested_dict, *a, **kw)
data = nested_dict(number=1) # or nested_dict({'number': 1})

关于python - 递归collections.defaultdict初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54095495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com