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

Mor*_*mir 5 python dictionary python-2.7

我有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}
Run Code Online (Sandbox Code Playgroud)

每个词典级别都比后面的那些级别“强”。如,A发现dict1将是“更强大”比A中发现的dict2以优先的形式。是否有一个简短而优美的脚本来创建一个新字典,将其全部四个部分组装在一起,其中每个键都来自包含该键的“最强”词典?

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

chr*_*ris 5

我认为这里最简单/最清晰的方法是创建一个新字典,然后使用其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}
Run Code Online (Sandbox Code Playgroud)

文档

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

>>> 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}
Run Code Online (Sandbox Code Playgroud)

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