Python合并两个字典列表求并集去重及标记公共元素问题咨询
问题分析
原代码采用嵌套双循环的逻辑错误,每遍历到一组x、y只要key值不相等就会向结果中插入x和y,最终会产生大量重复元素,完全不符合取并集的要求。
解决思路
要实现需求可以按以下逻辑处理:
- 先提取列表2的所有key存入集合,用于快速判断元素是否同时存在于两个列表
- 先遍历列表1的所有元素:如果当前key也存在于列表2,就生成带
confidence:1标记的字典加入结果,同时记录该公共key;否则直接把当前元素加入结果 - 最后遍历列表2的所有元素,把不属于公共key的元素加入结果即可,这个逻辑还能保持和你预期输出完全一致的元素顺序。
正确实现代码
lst1 = [{'key': 'data_collected.service_data'}, {'key': 'gdpr.gdpr_compliance'}, {'key': 'disclosure_of_information.purpose_of_disclosure'}, {'key': 'opt_out.choice_of_opt_out'}] lst2 = [{'key': 'child_data_protection.parent_guardian_consent'}, {'key': 'ccpa.ccpa_compliance'}, {'key': 'disclosure_of_information.purpose_of_disclosure'}, {'key': 'opt_out.choice_of_opt_out'}] # 提取lst2的所有key用于快速判断 keys2 = {x['key'] for x in lst2} common_keys = set() res = [] # 处理lst1的所有元素 for x in lst1: current_key = x['key'] if current_key in keys2: res.append({"key": current_key, "confidence": 1}) common_keys.add(current_key) else: res.append(x) # 处理lst2中独有的元素 for y in lst2: current_key = y['key'] if current_key not in common_keys: res.append(y) print(res)
输出验证
运行后输出和预期完全一致:
[{'key': 'data_collected.service_data'}, {'key': 'gdpr.gdpr_compliance'}, {'key': 'disclosure_of_information.purpose_of_disclosure', 'confidence': 1}, {'key': 'opt_out.choice_of_opt_out', 'confidence': 1}, {'key': 'child_data_protection.parent_guardian_consent'}, {'key': 'ccpa.ccpa_compliance'}]
内容的提问来源于stack exchange,提问作者muna
相关产品推荐
相关产品推荐

