You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:03:22