合并两个具有不同键和值的字典列表

时间:2021-06-29 13:11:19

标签: python list dictionary merge

我有两个字典列表:

dl1 = [{'symbol': 'ETHBTC', 'price': '0.06081700'}, {'symbol': 'LTCBTC', 'price': '0.00405000'}]
dl2 = [{'symbol': 'ETHBTC', 'makerCommission': '0.001', 'takerCommission': '0.001'}, {'symbol': 'LTCBTC', 'makerCommission': '0', 'takerCommission': '0.001'}]

我想像这样在 symbol 上将它们合并:

{'symbol': 'ETHBTC', 'price': '0.06081700', 'makerCommission': '0.001', 'takerCommission': '0.001'}, {'symbol': 'LTCBTC', 'price': '0.00405000', 'makerCommission': '0', 'takerCommission': '0.001'}

我在这里阅读了有关执行类似操作的各种方法的答案,其中包括 defaultdict()、列表理解、pandas、extend() 和循环,但我没有找到任何描述如何做到这一点,其中两个列表中的每个字典都有不同的键和值,而不是我想要合并的键和值。

感谢任何见解。

2 个答案:

答案 0 :(得分:2)

使用熊猫很容易。只需将您的 dict 转换为数据框并合并,然后再转换回 dict。

pd.merge(pd.DataFrame(dl1), pd.DataFrame(dl2), on='symbol').to_dict(orient='records')

[{'symbol': 'ETHBTC',
  'price': '0.06081700',
  'makerCommission': '0.001',
  'takerCommission': '0.001'},
 {'symbol': 'LTCBTC',
  'price': '0.00405000',
  'makerCommission': '0',
  'takerCommission': '0.001'}]

答案 1 :(得分:1)

您可以使用 zip 和 dict 解包:

dl_merge = [{**d1, **d2} for d1, d2 in zip(dl1, dl2)]

如果列表尚未排序,则必须从第二个列表中找到匹配的元素,最好使用恒定的查找时间:

dl2_aux = {d["symbol"]: d for d in dl2}  # assumes each symbol occurs only once

dl_merge = [{**d1, **dl2_aux.get(d1["symbol"], {})} for d1 in dl1]