我有两个字典列表:
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()
和循环,但我没有找到任何描述如何做到这一点,其中两个列表中的每个字典都有不同的键和值,而不是我想要合并的键和值。
感谢任何见解。
答案 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]