如何从字典列表中提取指定key对应值存在重复的所有字典
实现提取指定key值重复字典的Python方案
方法原理
先统计所有字典中b字段的出现频率,再根据频率过滤出频率大于1的所有对应字典即可,逻辑简单高效。
完整实现代码
from collections import Counter # 注意不要用list作为变量名,会覆盖Python内置类型,这里改为original_list original_list = [ { "a": "1", "b": "2", "c": "3" }, { "a": "4", "b": "2", "c": "6" }, { "a": "7", "b": "8", "c": "9" }, { "a": "10", "b": "11", "c": "12" }, { "a": "13", "b": "8", "c": "15" } ] # 统计所有b值的出现次数 b_counts = Counter(item['b'] for item in original_list) # 过滤出b值出现次数大于1的字典,即你需要的结果 list_duplicates = [item for item in original_list if b_counts[item['b']] > 1]
运行后list_duplicates和你给出的预期输出完全一致。
关于反向逻辑的问题
完全可以用反向删除的逻辑实现,本质和上述过滤逻辑等价,只需要把过滤条件改成剔除b值出现次数等于1的字典即可,写法如下:
list_duplicates = [item for item in original_list if b_counts[item['b']] != 1]
无依赖实现方案
如果不想导入collections模块,也可以手动统计频率,逻辑完全一致:
# 手动统计b值出现次数 b_counts = {} for item in original_list: b_val = item['b'] b_counts[b_val] = b_counts.get(b_val, 0) + 1 # 后续过滤逻辑和上面完全相同 list_duplicates = [item for item in original_list if b_counts[item['b']] > 1]
内容的提问来源于stack exchange,提问作者Howins
相关产品推荐
相关产品推荐

