Python中如何按字典值的出现频率对字典进行排序
Python按字典值的出现频率排序字典实现方案
要实现需求中的排序规则(值的出现频率越高越靠前,同值键值对保留原字典中的相对顺序),可按以下步骤操作:
- 统计原字典中每个值的出现频次
- 以「键值对对应值的出现频次」为排序键,对字典的键值对序列做降序稳定排序
- 将排序后的序列重新组装为字典
完整实现代码
from collections import Counter # 待排序的原始字典 original_dict = {'apples': 2, 'oranges': 5, 'bananas': 2, 'corn': 1, 'tangerines': 2, 'popsicles': 5} # 第一步:统计每个值的出现频率 value_freq = Counter(original_dict.values()) # 第二步:按值的出现频率降序排序,同排序键的元素保留原相对顺序 sorted_kv = sorted(original_dict.items(), key=lambda item: value_freq[item[1]], reverse=True) # 第三步:组装为新字典(Python 3.7+ 原生字典默认保留插入顺序) sorted_dict = dict(sorted_kv) print(sorted_dict)
运行结果
代码执行后输出完全匹配预期:
{'apples': 2, 'bananas': 2, 'tangerines': 2, 'oranges': 5, 'popsicles': 5, 'corn': 1}
注意事项
注意:不要直接使用key=lambda x: x[1]作为排序参数,该写法是按值的数值大小排序,不符合按值出现频率排序的需求。
如果使用Python 3.7以下版本,原生字典不保证插入顺序,需要替换字典组装逻辑,用
OrderedDict存储排序结果保证顺序不丢失:from collections import OrderedDict sorted_dict = OrderedDict(sorted_kv)
逻辑说明
- 示例中统计得到的值频次为:值
2共出现3次(频次最高)、值5共出现2次、值1共出现1次(频次最低),因此排序后同值的键值对会按频次高低成组排列 - Python内置的
sorted是稳定排序,排序键相同的元素会保留在原始序列中的相对位置,因此同值的键会保持在原字典中出现的先后顺序,和预期输出完全匹配。
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

