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
相关产品推荐
相关产品推荐

