如何根据值合并两个字典列表

Jav*_* DR 6 python dictionary

我有两个字典列表,可以说:

a = [{'id': 1, 'name': 'a'}]
b = [{'id': 1, 'city': 'b'}]
Run Code Online (Sandbox Code Playgroud)

我想要一个列表,将两个列表中具有相同 ID 的每个字典合并。在这个例子中我希望有:

a = [{'id': 1, 'name': 'a', 'city': 'b'}]
Run Code Online (Sandbox Code Playgroud)

除了将 for 嵌套到另一个中之外,还有其他更干净的方法吗?

谢谢

Mar*_*yer 7

您可以使用另一个字典(或defaultdict以使事情变得更简单)来跟踪ID。然后在迭代时更新该字典中的项目。最后字典的值将包含您的列表。

\n
from collections import defaultdict\nd = defaultdict(dict)\n\na = [{'id': 1, 'name': 'a'}, {'id': 3, 'name': 'a'}]\nb = [{'id': 1, 'city': 'b'}, {'id': 2, 'city': 'c'}, {'id': 3, 'city': 'd'}]\n\nfor item in a + b:\n    d[item['id']].update(item)\nlist(d.values())\n\n# [{'id': 1, 'name': 'a', 'city': 'b'},\n#  {'id': 3, 'name': 'a', 'city': 'd'},\n#  {'id': 2, 'city': 'c'}]\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,这将覆盖除 id \xe2\x80\x94 之外的重复值,因此如果您有两个城市且id: 1两个不同的城市,您将仅获得最后一个城市。

\n