Python 词典的合并

Python 词典的合并,python,dictionary,merge,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

我想知道把两本字典结合起来的最好的/最通俗的方法是什么

我有两本字典看起来是这样的:

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'}}
我希望将它们合并在一起,以便
更新
字典中的值将更新
原始
字典中的相应值

result = {'user1': {'COL': 'black', 'ID': '234235', 'NAME': 'andy'},
          'user2': {'COL': 'purple', 'ID': '234234', 'NAME': 'john', 'SPEC': 'na'}}
我尝试过使用
集合
复制
,但是,我最终替换了键的整个值

for k in update:
    if k in original:
            original[k].update(update[k])
    else:
            original[k] = update[k]

这是假设只有一个嵌套级别。更深层次的解决方案可能会更复杂。这也会改变字典的原始版本,这可能不是您想要的行为。

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

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

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

for user, values in update.iteritems():
    for k, v in values.iteritems():
        original[user][k] = v
您可以创建嵌套的dict理解表达式来实现它:

{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'}}

update
是否可以包含一个不在
original
中的
user
?@ekhumaro,不,更新不会包含一个不在'original'中的'user',在这种情况下,您需要的就是这个。