使用公共id键合并两个词典列表

2024-09-30 18:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下两个词典列表:

list_1 = [
   {'id': '1', 'name': 'Johnny Johson1'},
   {'id': '2', 'name': 'Johnny Johson2'},
   {'id': '1', 'name': 'Johnny Johson1'},
   {'id': '3', 'name': 'Johnny Johson3'},
]
list_2 = [
   {'id': '1', 'datetime': '2020-01-06T12:30:00.000Z'},
   {'id': '2', 'datetime': '2020-01-06T14:00:00.000Z'},
   {'id': '1', 'datetime': '2020-01-06T15:30:00.000Z'},
   {'id': '3', 'datetime': '2020-01-06T15:30:00.000Z'},
]

本质上,我希望即使在重复ID上也不会丢失数据,因为它们代表不同的事件(有一个单独的ID,但为了演示问题,不需要)。如果一个列表中有任何ID,而另一个列表中没有,则忽略该ID

理想情况下,我想以以下内容结束(从两个列表的合并中):

list_3 = [
   {'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T12:30:00.000Z'},
   {'id': '2', 'name': 'Johnny Johson2', 'datetime': '2020-01-06T14:00:00.000Z'},
   {'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T15:30:00.000Z'},
   {'id': '3', 'name': 'Johnny Johson3', 'datetime': '2020-01-06T15:30:00.000Z'},
]

Tags: 数据nameid列表datetime事件代表list
1条回答
网友
1楼 · 发布于 2024-09-30 18:22:17

您可以使用以下列表理解,它使用双星号关键字argent unpacking语法,使用zip()获得的成对元素对两个列表进行计算。这样做的效果是将两本词典合并为一本

list_3 = [{**x, **y} for x, y in zip(list_1, list_2)]

输出:

>>> list3
[{'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T12:30:00.000Z'},
 {'id': '2', 'name': 'Johnny Johson2', 'datetime': '2020-01-06T14:00:00.000Z'},
 {'id': '1', 'name': 'Johnny Johson1', 'datetime': '2020-01-06T15:30:00.000Z'},
 {'id': '3', 'name': 'Johnny Johson3', 'datetime': '2020-01-06T15:30:00.000Z'}]

注意,这种方法至少需要Python3.5

相关问题 更多 >