Python中如何删除字典中值为异常值的元素
如何删除字典中值为少数派的元素?
假设你的字典包含100多个元素,其中绝大多数值相同,只有个别元素的值不一样(比如下面的示例里,大部分值是12,只有3对应23、8对应2这两个例外),想要删掉这些少数值对应的键值对,可以按以下步骤操作:
示例输入
Diction = {1:12,2:12,3:23,4:12,5:12,6:12,7:12,8:2}
期望输出
Diction = {1:12,2:12,4:12,5:12,6:12,7:12}
解决方法
核心思路是先找出出现次数最多的那个“多数值”,再过滤字典只保留值等于这个多数值的项。
步骤1:统计值的出现频率
用collections.Counter可以快速统计字典中每个值的出现次数:
from collections import Counter value_counts = Counter(Diction.values())
步骤2:获取出现次数最多的值
通过most_common(1)取出出现次数最高的元素,取其值部分:
most_common_value = value_counts.most_common(1)[0][0]
步骤3:过滤生成新字典
用字典推导式生成只保留多数值的新字典:
filtered_dict = {key: val for key, val in Diction.items() if val == most_common_value}
如果想要直接修改原字典而不是生成新字典,可以先收集所有需要删除的键,再批量删除(避免遍历原字典时删除元素引发的问题):
keys_to_delete = [key for key, val in Diction.items() if val != most_common_value] for key in keys_to_delete: del Diction[key]
补充说明
如果字典中有多个值出现次数相同且都是最高频(比如一半值是A,一半是B),这个方法会保留所有对应最高频值的项。但根据你的场景,只有一两个少数值,这个方法完全适用。
内容的提问来源于stack exchange,提问作者Z. Zhang
相关产品推荐
相关产品推荐

