【问题标题】:Merge two list of dictionary based on key values根据键值合并两个字典列表
【发布时间】:2021-09-17 15:13:32
【问题描述】:

我有两个字典列表:

a =[{ 'id': "1", 'date': "2017-01-24" },{ 'id': "2", 'date': "2018-01-24" },{ 'id': "3", 'date': "2019-01-24" }]
b =[{ 'id': "1", 'name': "abc" },{ 'id': "2",'name': "xyz"},{ 'id': "4",'name': "ijk"}]

我想根据 id 合并这些字典,结果应该是:

[{ 'id': "1", 'date': "2017-01-24",'name': "abc" },{ 'id': "2", 'date': "2018-01-24",'name': "xyz" },{ 'id': "3", 'date': "2019-01-24" },{ 'id': "4",'name': "ijk"}]

如何在不迭代 python 的情况下做到这一点?

【问题讨论】:

  • 为什么不能迭代?
  • 这些是列表,您必须进行迭代。也许您认为存在一个漏洞,您不将理解视为迭代,但它仍然是迭代。 某处您正在依次查看每个项目。
  • 我已经编辑了我的问题。如果一个键不在另一个键中,如何获得结果。

标签: python dictionary merge


【解决方案1】:

由于 dicts 存储在列表中,您要么必须迭代,要么使用诸如 pandas 之类的矢量化方法....例如:

import pandas as pd
a =[{ 'id': "1", 'date': "2017-01-24" },{ 'id': "2", 'date': "2018-01-24" }]
b =[{ 'id': "1", 'name': "abc" },{ 'id': "2",'name': "xyz"}]

df1 = pd.DataFrame(a)
df2 = pd.DataFrame(b)
out = df1.merge(df2, on='id').to_dict('r')

结果:

[{'id': '1', 'date': '2017-01-24', 'name': 'abc'}, {'id': '2', 'date': '2018-01-24', 'name': 'xyz'}]

未经测试,我不确定这如何将速度方面与简单的迭代进行比较。迭代可能需要很长时间,但 pandas 还必须构建数据帧并将输出转换为 dict,因此需要权衡

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 2021-12-28
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2019-05-15
    相关资源
    最近更新 更多