You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定键合并两个多数键值对不同的字典列表

按指定键合并两个字典列表的实现方案

这其实是个非常典型的字典合并场景,刚好你的情况里除了symbol作为匹配键,两个列表里的其他字典键完全不重叠,处理起来反而更直接。给你分享几个实用的实现思路:

方法1:字典映射+循环(高效易读)

先把其中一个列表转换成以symbol为键的映射字典,这样后续查找匹配项的效率是O(1),然后遍历另一个列表完成合并:

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

# 将dl2转换为symbol到完整字典的映射
symbol_lookup = {item['symbol']: item for item in dl2}

merged_result = []
for item in dl1:
    target_symbol = item['symbol']
    # 合并两个字典:因为你的场景没有重复键,顺序不影响;如果有重复键,后面的会覆盖前面的
    combined_item = {**item, **symbol_lookup[target_symbol]}
    merged_result.append(combined_item)

print(merged_result)

这个方法的优势是时间复杂度低(O(n+m),n和m分别是两个列表的长度),逻辑清晰,不管数据量大小都能稳定运行。如果担心两个列表的symbol不完全匹配(比如有的symbol只在其中一个列表里),可以加个判断分支处理缺失情况:

merged_result = []
for item in dl1:
    target_symbol = item['symbol']
    if target_symbol in symbol_lookup:
        combined_item = {**item, **symbol_lookup[target_symbol]}
        merged_result.append(combined_item)
    else:
        # 可根据需求选择跳过,或者保留原item
        merged_result.append(item.copy())

方法2:列表推导式(简洁紧凑)

如果喜欢更简洁的代码风格,可以把上面的逻辑写成列表推导式,功能完全一致:

symbol_lookup = {d['symbol']: d for d in dl2}
merged_result = [{**d, **symbol_lookup[d['symbol']]} for d in dl1]

方法3:Pandas(适合大数据/多表场景)

如果你的数据本来就在Pandas生态中处理,或者需要更灵活的匹配规则(比如左连接、右连接),用merge方法会更方便:

import pandas as pd

# 转成DataFrame
df1 = pd.DataFrame(dl1)
df2 = pd.DataFrame(dl2)

# 按symbol内连接(只保留两边都有的symbol)
merged_df = pd.merge(df1, df2, on='symbol', how='inner')
# 转回字典列表
merged_result = merged_df.to_dict('records')

print(merged_result)

这个方法的优势是扩展性强,比如要处理多个字典列表合并、缺失值填充、过滤特定symbol等需求,Pandas的API都能轻松实现。

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:44:05