我想知道将两本词典结合起来的最佳/最佳方法是什么。
我有两个字典看起来像这样:
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
,但是,我最终会替换密钥的整个值。
答案 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'}}