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

Python对比两个字典列表 提取List2中独有字典元素

实现方法

核心逻辑是先提取List1中所有元素的唯一匹配标识存入集合,再遍历List2筛选出标识不存在于集合中的元素即可,匹配标识由两部分组成:

  • 字典中zrepcode键对应的值
  • 字典中除zrepcode外的纯数字字符串格式的id键

实现代码

List1 = [{"3":[{"period":"P13","value":10,"year":2022}],"zrepcode":"55"},{"1":[{"period":"P10","value":5,"year":2023}],"zrepcode":"55"}]
List2 = [{"1":[{"period":"P1","value":10,"year":2023},{"period":"P2","value":5,"year":2023}],"zrepcode":"55"},{"3":[{"period":"P1","value":4,"year":2023},{"period":"P2","value":7,"year":2023}],"zrepcode":"55"},{"4":[{"period":"P1","value":10,"year":2023}],"zrepcode":"55"}]

# 存储List1所有元素的匹配标识
list1_match_keys = set()
for item in List1:
    zrep_val = item["zrepcode"]
    # 提取字典中的数字格式id键
    num_id_key = [k for k in item.keys() if k != "zrepcode" and k.isdigit()][0]
    list1_match_keys.add((zrep_val, num_id_key))

# 筛选List2独有的元素
res = []
for item in List2:
    zrep_val = item["zrepcode"]
    num_id_key = [k for k in item.keys() if k != "zrepcode" and k.isdigit()][0]
    if (zrep_val, num_id_key) not in list1_match_keys:
        res.append(item)

运行结果

执行代码后得到的res和预期结果完全一致:

[{"4":[{"period":"P1","value":10,"year":2023}],"zrepcode":"55"}]

说明:如果后续单个字典中存在多个数字字符串格式的id键,只需要调整id键的提取逻辑,将所有数字键纳入匹配标识的生成规则即可,当前代码适配你给出的单数字键字典结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:39:18