python - 按层次结构从许多字典中获取值

标签 python python-2.7 dictionary

我有 4 个字典,我们称它们为:

dict1dict2dict3dict4

示例:

dict1 = {'A': 1, 'B':2}
dict2 = {'A': 3, 'C':4}
dict3 = {'B': 5, 'D':6}
dict4 = {'A': 7, 'B':8, 'C': 9, 'D':10, 'E':11}

每个词典级别都比其后的级别“更强”。例如,就优先级而言,在 dict1 中找到的 A 将比在 dict2 中找到的 A “更强”。 是否有一个简短、优雅的脚本来创建一个由所有四个字典组合而成的新字典,其中每个键都取自包含该键的“最强”字典?

结果应该是:dict = {'A':1, 'B':2, 'C':4, 'D:6', 'E':11}

最佳答案

我认为这里最简单/最清晰的方法是创建一个新字典,然后使用它的 update 方法,该方法会覆盖现有的键。像这样的事情使得优先级非常明显:

>>> x = {}
>>> x.update(dict4)
>>> x.update(dict3)
>>> x.update(dict2)
>>> x.update(dict1)
>>> x
{'A': 1, 'B': 2, 'C': 4, 'D': 6, 'E': 11}

Docs

您当然可以为此创建某种实用程序,例如:

>>> def collapse(*dicts):
...     x = {}
...     for dict in dicts:
...         x.update(dict)
...     return x
...
>>>
>>> collapse(dict4, dict3, dict2, dict1)
{'A': 1, 'B': 2, 'C': 4, 'D': 6, 'E': 11}

(尽管您需要记住以正确的顺序传递字典。)

关于python - 按层次结构从许多字典中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58957408/

相关文章:

python - 如何将 defaultdicts [of defaultdicts] 的 defaultdict 转换为 dicts [of dicts] 的 dict?

python - 使用 haystack/elasticsearch 进行部分词搜索

python - 生成随机音频或以不同的偏移量播放文件

python - 有没有办法创建 Alexa 智能家居组并根据发现的设备以编程方式预先填充它?

python-2.7 - Python 请求 Post 请求在使用 Livy 连接到 Kerberized Hadoop 集群时失败

python - 拆分字符串并生成键值对

C# 字符串从结构中消失

android - 类 java.util.Map 具有泛型类型参数,请改用 GenericTypeIndicator

python - 如何在 Azure 应用服务上运行 django manage.py 命令

python - 在正则表达式模式中查找可能组的名称