Python如何按值的出现频率从高到低排序字典
按值的出现频率排序字典
实现思路
要实现按值的出现频率从高到低排序字典,核心分为两步:
- 统计每个值在字典中的出现次数
- 以值的出现频率为第一排序依据(降序),同频率的键值对保持原字典中的出现顺序,对原字典的键值对进行排序
代码实现
from collections import Counter # 原始输入数据 input_data = [{1: '100', 2: '102', 3: '101', 4: '100', 5: '102', 6: '100', 7: '102', 8: '101', 9: '100'}] original_dict = input_data[0] # 统计每个值的出现频率 value_freq = Counter(original_dict.values()) # 保存原字典的键顺序,用于同频率时保持原顺序 original_keys = list(original_dict.keys()) # 按值的频率降序排序,同频率则按原键的出现顺序排序 sorted_items = sorted( original_dict.items(), key=lambda item: (-value_freq[item[1]], original_keys.index(item[0])) ) # 转换为字典并封装回列表 result = [dict(sorted_items)] print(result)
代码说明
Counter(original_dict.values()):快速统计每个值的出现次数,返回一个键为值、值为对应频率的计数器对象sorted函数的key参数:-value_freq[item[1]]:用负号实现频率的降序排列(频率越高,排序越靠前)original_keys.index(item[0]):当多个值的频率相同时,按照它们在原字典中的出现顺序排列,保证结果和示例一致
- 最后将排序后的键值对列表转换为字典,再放回原列表结构中
运行代码后会输出你期望的结果:
[{1: '100', 4: '100', 6: '100', 9: '100', 2: '102', 5: '102', 7: '102', 3: '101', 8: '101'}]
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

