【问题标题】:Merging two lists of dictionaries using common id key使用公共 id 键合并两个字典列表
【发布时间】:2020-04-24 04:26:42
【问题描述】:

我有以下两个字典列表:

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'},
]

【问题讨论】:

    标签: python python-3.x list dictionary python-3.7


    【解决方案1】:

    您可以使用以下列表推导式,它使用双星号关键字 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。

    【讨论】:

    • 感谢 CDJB,我喜欢它的简洁性以及解包操作符的强大功能。 ** 很棒。离题,但甚至可以在'{key1}, {key2}'.format(**dict) 中使用它。
    猜你喜欢
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2012-12-05
    • 2023-01-26
    • 2022-11-28
    相关资源
    最近更新 更多