合并字典词典

时间:2016-11-18 19:25:33

标签: python dictionary merge

我想知道将两本词典结合起来的最佳/最佳方法是什么。

我有两个字典看起来像这样:

original = {'user1': {'COL': 'green', 'ID': '234235', 'NAME': 'andy'},
            'user2': {'COL': 'blue', 'ID': '234234', 'NAME': 'john'}}

update = {'user1': {'COL': 'black', 'ID': '234235', 'NAME': 'andy'},
          'user2': {'COL': 'purple', 'SPEC': 'na'}}

我想将它们合并在一起,以便在update字典中找到的值会更新original字典中的相应值。

result = {'user1': {'COL': 'black', 'ID': '234235', 'NAME': 'andy'},
          'user2': {'COL': 'purple', 'ID': '234234', 'NAME': 'john', 'SPEC': 'na'}}

我已尝试使用collectionscopy,但是,我最终会替换密钥的整个值。

4 个答案:

答案 0 :(得分:1)

这只是一个简单的for循环:

for k in original:
    original[k].update(update.get(k, {}))

答案 1 :(得分:0)

<ul>
    <li>@Html.ActionLink("Home", "Index", "Home")</li>
    <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
    <li>@Html.ActionLink("About", "About", "Home")</li>
    <li>@Html.ActionLink("My Messages", "MyMessages", "Home")</li>
</ul>

这假设只有一个嵌套级别。更深层次的解决方案有望变得更加复杂。这也会改变字典for k in update: if k in original: original[k].update(update[k]) else: original[k] = update[k] ,这可能不是你想要的行为。

答案 2 :(得分:0)

如果每次有两个级别,则可以使用双重迭代:

for user, values in update.iteritems():
    for k, v in values.iteritems():
        original[user][k] = v

答案 3 :(得分:0)

您可以创建一个嵌套的字典理解表达式来实现它:

{k1: {k2: update[k1].get(k2, v2) for k2, v2 in v1.items()} for k1, v1 in original.items()}

将返回值:

{'user2': {'ID': '234234', 'NAME': 'john', 'COL': 'purple'}, 'user1': {'ID': '234235', 'NAME': 'andy', 'COL': 'black'}}