合并字典的词典
问题描述:
我想知道什么是结合字典的两个字典的最好/最pythonic方式。合并字典的词典
我有两个字典看起来像这样:
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'}}
我一直在使用collections
和copy
试过,但是,我最终更换为重点的整个价值。
答
这只是一个简单的for循环:
for k in original:
original[k].update(update.get(k, {}))
答
for k in update:
if k in original:
original[k].update(update[k])
else:
original[k] = update[k]
这是假设只有一个级别的嵌套。更深层的解决方案有望变得更加复杂。这也会改变字典original
,这可能不是你想要的行为。
答
如果有每次两个层次,您可以使用双迭代:
for user, values in update.iteritems():
for k, v in values.iteritems():
original[user][k] = v
答
您可以创建一个嵌套字典理解表达实现它:
{k1: {k2: update[k1].get(k2, v2) for k2, v2 in v1.items()} for k1, v1 in original.items()}
这将retu rn值:
{'user2': {'ID': '234234', 'NAME': 'john', 'COL': 'purple'}, 'user1': {'ID': '234235', 'NAME': 'andy', 'COL': 'black'}}
'update'是否可以包含一个'user'而不是'original'? – ekhumoro
@ekhumoro,不,更新不会包含不在'原始' –
'用户'在这种情况下,[回答@ wim](http://*.com/a/40684691/984421)是什么你需要。 – ekhumoro