gpt4 book ai didi

python - 深集python字典

转载 作者:太空狗 更新时间:2023-10-30 02:38:57 26 4
gpt4 key购买 nike

我有一个保存的 Python 字典键列表:

['level_one', 'level_two', 'test']

这些是字典的键:

mydict = {
'level_one' : {
'level_two' : {
'test' : "Hello World"
}
}
}

通常我可以这样设置 test 键:

mydict['level_one']['level_two']['test'] = "Hello StackOverflow"

不幸的是,列表/字典是动态生成的,我不知道它能有多深。是否可以在不使用大括号的情况下通过键列表更新字典键?

我只能反射(reflect)这个获取字符串的功能:

def deepGet(sourceDict, *keys):
return reduce(lambda d, k: d.get(k) if d else None, keys, sourceDict)

> deepGet(mydict, *['level_one', 'level_two', 'test'])
>> Hello World

不是重复的。这是关于设置,而不是获取嵌套字典。

最佳答案

现在有一种动态深度设置值的方法,无需将容器类型更改为 defaultdict 或其他动态创建类型:glom.assign() .

您案例的用法示例:

import glom

target = {}
path = 'level_one.level_two.test'

glom.assign(target, path, 'hello world', missing=dict)
# {'level_one': {'level_two': {'test': 'hello world'}}}

注意我们传递了 missing=dict,告诉 glom 使用内置的 dict 构造函数创建缺失的键。您还需要 pip install glom,但它是纯 Python 并且与 Python 2、3 和 PyPy 兼容。

使用 glom 还可以做很多事情,尤其是围绕深度获取和设置。我应该知道,因为(完全公开)我创造了它。这意味着如果你发现一个差距,你应该 let me know !


关于python - 深集python字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45665949/

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