Python对比两组字典tin值差异 输出第二组独有值的方法
字典数据tin字段差集计算方案
问题1:适配对比操作的初始数据存储方式
- 只做
tin字段差集计算的场景,直接把两组数据的tin值抽出来存成Python的set(集合)就行。集合的成员判断、差集运算都是原生优化过的,比遍历列表逐行匹配快得多,数据量上去之后性能差距特别明显。 - 要是后续还要根据
tin关联查询对应的Amount之类的其他字段,原始字典列表可以保留,也可以直接处理成{tin值: 对应完整字典}的键值对结构,单条数据查询也是O(1)复杂度,用着更方便。
问题2:提取第二组存在、第一组不存在的tin值
直接用集合做成员判断就能实现单向差集计算,不需要做反向对比,参考实现代码如下:
# 第一组原始数据 data1 = [ {'tin': '00194500874886', 'Amount': 'LOW'}, {'tin': '00523523523574', 'Amount': 'MEDIUM'}, {'tin': '56756756536745', 'Amount': 'NONE'}, {'tin': '00194523575674', 'Amount': 'HIGH'}, {'tin': '51245354536734', 'Amount': 'LOW'} ] # 第二组原始数据 data2 = [ {'tin': '00194500874886', 'Amount': 'LOW'}, {'tin': '07867867867865', 'Amount': 'MEDIUM'}, {'tin': '55675675756756', 'Amount': 'NONE'} ] # 提取第一组所有tin值构建查询集合 tin_set1 = {item['tin'] for item in data1} # 筛选第二组中不在第一组集合内的tin值 diff_result = {item['tin'] for item in data2 if item['tin'] not in tin_set1} print(diff_result)
代码运行后输出结果完全匹配需求:
{'07867867867865', '55675675756756'}
小提示:十万条以上数据量级下,这个集合方案比手写两层for循环逐行对比快百倍以上,不需要依赖任何第三方库,原生Python环境直接就能跑。
内容的提问来源于stack exchange,提问作者PythonNewbie
相关产品推荐
相关产品推荐

