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',在这种情况下,您需要的就是这个。