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

如何按两组键值对过滤两个字典列表并将匹配项分组?

字典列表按匹配键值对分组解决方案

嘿,我来帮你搞定这个分组需求!咱们要做的是根据Symbol和Time这两个键的组合(这俩是唯一标识每条记录的核心字段),把两个字典列表里的条目分成三类:两边都存在的匹配条目、只在List_D1里的条目、只在List_D2里的条目。下面是具体的实现步骤和代码:

实现思路

  1. 给每个字典生成唯一标识键:用(Symbol, Time)元组,精准匹配同一股票同一时间的记录;
  2. 把两个列表转换成以这个唯一键为索引的字典,方便快速查找和对比;
  3. 找出两个字典的共同键、List_D1独有的键、List_D2独有的键;
  4. 根据这些键提取对应的条目,完成分组。

代码实现

# 原始数据
List_D1 = [
    {'Symbol':'GFX','Time':'9:36am', 'Change':-0.18, 'Volume':181800},
    {'Symbol':'AIG','Time':'9:36am', 'Change':-0.15, 'Volume': 195500},
    {'Symbol':'AXP','Time':'9:36am', 'Change':-0.46, 'Volume': 935000},
]
List_D2 = [
    {'Symbol':'AA','Time':'7:36am', 'Change':-0.08, 'Volume':181800},
    {'Symbol':'AIG','Time':'9:36am', 'Change':0.99, 'Volume': 197500},
    {'Symbol':'GFX','Time':'9:36am', 'Change':-0.46, 'Volume': 935000},
]

# 生成以(Symbol, Time)为键的字典,方便快速匹配
dict_d1 = {(item['Symbol'], item['Time']): item for item in List_D1}
dict_d2 = {(item['Symbol'], item['Time']): item for item in List_D2}

# 找出各类键的集合
common_keys = dict_d1.keys() & dict_d2.keys()  # 两边都有的键
d1_only_keys = dict_d1.keys() - dict_d2.keys() # 仅D1有的键
d2_only_keys = dict_d2.keys() - dict_d1.keys() # 仅D2有的键

# 组装分组结果
grouped_result = {
    '匹配条目': [(dict_d1[key], dict_d2[key]) for key in common_keys],
    '仅List_D1存在': [dict_d1[key] for key in d1_only_keys],
    '仅List_D2存在': [dict_d2[key] for key in d2_only_keys]
}

# 打印查看结果
print("分组后的结果:")
for group_name, items in grouped_result.items():
    print(f"\n{group_name}:")
    for item in items:
        print(item)

运行结果

运行代码后会得到如下输出:

分组后的结果:

匹配条目:
({'Symbol': 'GFX', 'Time': '9:36am', 'Change': -0.18, 'Volume': 181800}, {'Symbol': 'GFX', 'Time': '9:36am', 'Change': -0.46, 'Volume': 935000})
({'Symbol': 'AIG', 'Time': '9:36am', 'Change': -0.15, 'Volume': 195500}, {'Symbol': 'AIG', 'Time': '9:36am', 'Change': 0.99, 'Volume': 197500})

仅List_D1存在:
{'Symbol': 'AXP', 'Time': '9:36am', 'Change': -0.46, 'Volume': 935000}

仅List_D2存在:
{'Symbol': 'AA', 'Time': '7:36am', 'Change': -0.08, 'Volume': 181800}

如果之后需要调整匹配的键(比如只用Symbol匹配),只需要修改生成唯一键的逻辑就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:24