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

Python比对两个字典列表提取指定字段共有值的实现方法

问题背景

现有两组存储url信息的字典列表,注意原示例中两个列表均命名为ref会出现变量覆盖问题,先做区分命名:

  • 第一组存储url与分类映射:
ref_category = [{"url":"https://example1.com","category":"sports"},
       {"url":"https://example2.com","category":"movie"},
       {"url":"https://example3.com","category":"sports"},
       {"url":"https://example4.com","category":"sports"}]
  • 第二组存储url与机构信息映射:
ref_org = [{"url":"https://example1.com","org":"sports"},
       {"url":"https://example5.com","org":"movie"},
       {"url":"https://example2.com","org":"sports"},
       {"url":"https://examplex.com","org":"movie"},
       {"url":"https://example3.com","org":"sports"}]

需求为提取两个列表中url字段值完全相同的条目,预期输出:

["https://example1.com","https://example2.com", "https://example3.com"]
原写法错误分析

之前使用的列表推导式[i for i in new["url"] if i in ref["url"]]无法得到正确结果,核心问题有三个:

  • 两个列表同名ref会被后赋值的列表覆盖,无法获取第一组列表数据
  • ref、new都是字典构成的列表,不是单个字典,直接用["url"]做索引会触发类型错误,Python列表不支持字符串键取值
  • 没有先遍历列表提取每个字典内的url值,直接对列表做成员判断逻辑不成立
正确实现方案

高效集合交集写法(推荐,适合大数据量场景)

利用集合交集计算重复值,成员判断时间复杂度为O(1),执行效率最高:

# 分别提取两组列表的所有url值,转为集合
url_set_category = {item["url"] for item in ref_category}
url_set_org = {item["url"] for item in ref_org}
# 取交集后转为列表即为结果
common_urls = list(url_set_category & url_set_org)

保序列表推导式写法

如果需要保留url在第一组列表中的原有出现顺序,可以用如下写法:

# 先把第二组列表的url存为集合,加速成员判断
org_url_pool = {item["url"] for item in ref_org}
common_urls = [item["url"] for item in ref_category if item["url"] in org_url_pool]

若列表中存在缺失url键的字典,可以把item["url"]替换为item.get("url", ""),避免触发KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:57:25