如何删除字典中值重复出现的所有键值对?
解决字典中删除所有值重复的键值对问题
嘿,这个需求很清晰——只要某个值在字典里出现多次,就把所有对应这个值的键值对都删掉,只保留那些值唯一的项对吧?咱们可以用两步轻松搞定:
方法一:用collections.Counter快速统计频次
Counter是Python标准库中专门用来统计元素出现次数的工具,用它来处理这个问题非常高效:
from collections import Counter # 你的示例字典 monster_dict = { 'Monster 1': 'Modema', 'Monster 2': 'Aninige', 'Monster 3': 'Dolamisme', 'Monster 4': 'Malexo', 'Monster 5': 'Eludisnismu', 'Monster 6': 'Du-Minime', 'Monster 7': 'Anu', 'Monster 8': 'Mu', 'Monster 9': 'Aluligige', 'Monster 10': 'Asmismu', 'Monster 11': 'Aninige', 'Monster 12': 'Dolamisme' } # 第一步:统计每个值的出现次数 value_counts = Counter(monster_dict.values()) # 第二步:过滤出值只出现一次的键值对 filtered_dict = {key: val for key, val in monster_dict.items() if value_counts[val] == 1} print(filtered_dict)
运行这段代码后,你会得到过滤后的字典:
{'Monster 1': 'Modema', 'Monster 4': 'Malexo', 'Monster 5': 'Eludisnismu', 'Monster 6': 'Du-Minime', 'Monster 7': 'Anu', 'Monster 8': 'Mu', 'Monster 9': 'Aluligige', 'Monster 10': 'Asmismu'}
方法二:手动统计频次(不依赖标准库)
如果你不想导入Counter,也可以用普通字典手动统计值的出现次数:
# 手动统计每个值的出现次数 value_counts = {} for val in monster_dict.values(): value_counts[val] = value_counts.get(val, 0) + 1 # 同样进行过滤 filtered_dict = {key: val for key, val in monster_dict.items() if value_counts[val] == 1}
这个方法的逻辑和第一种完全一致,只是把统计频次的部分换成了手动实现,适合需要轻量实现的场景。
两种方法的核心思路都是:先搞清楚每个值出现了多少次,再只保留那些出现次数为1的键值对,这样就完美解决了你的问题~
内容的提问来源于stack exchange,提问作者Richard Cooper
相关产品推荐
相关产品推荐

