python - 深集python字典

标签 python python-2.7 dictionary

我有一个保存的 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/

相关文章:

python - 字典中元组第一项的平均值

python - 如何使用yum在python2.7上安装python包

python - 使用 python 删除/替换多行代码部分

django - Django 1.6 的静态文件

python - 我应该使用什么工具来分析 Windows 7 上的 Python 代码

java - jackson :如何反序列化嵌套的自定义 map 和列表?

python - 使用python进行相机校准

Python。将字符串转换为日期时间抛出 ValueError

google-app-engine - Google App Engine - NDB - 索引问题

Python 3 使用 kwargs 替换嵌套字典值