我有两个字典列表,可以说:
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 嵌套到另一个中之外,还有其他更干净的方法吗?
谢谢
您可以使用另一个字典(或defaultdict以使事情变得更简单)来跟踪ID。然后在迭代时更新该字典中的项目。最后字典的值将包含您的列表。
\nfrom 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'}]\nRun Code Online (Sandbox Code Playgroud)\n请注意,这将覆盖除 id \xe2\x80\x94 之外的重复值,因此如果您有两个城市且id: 1两个不同的城市,您将仅获得最后一个城市。
| 归档时间: |
|
| 查看次数: |
5374 次 |
| 最近记录: |