使用公共 id 键合并两个字典列表
Merging two lists of dictionaries using common id key
我有以下两个词典列表:
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'},
]
您可以使用以下列表理解,它使用双星号关键字 argent 解包语法,使用通过 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'}]
请注意,此方法至少需要 Python 3.5.
我有以下两个词典列表:
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'},
]
您可以使用以下列表理解,它使用双星号关键字 argent 解包语法,使用通过 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'}]
请注意,此方法至少需要 Python 3.5.