如何对字典value按降序排序,值相同时按key的字母顺序排序
字典按值降序、同值按键升序排序方法
Python 3.7及以上版本的内置字典支持保留插入顺序,我们可以通过自定义排序规则直接实现需求:
- 排序优先级第一规则:按字典值降序排列
- 排序优先级第二规则:值相同时,按对应键的字母升序排列
实现思路
调用sorted()方法对字典的items()键值对序列排序,将排序关键字设置为元组(-值, 键):
- 对值取负数后升序排序,等价于原值的降序效果
- 同值场景下直接按键本身升序,对应字母顺序的排序要求
代码示例
输入示例字典:
input_dict = {'robert':13, 'walter':17, 'andrew':16, 'adrian':16, 'simon':15, 'santiago':15}
排序代码:
# 全量排序 sorted_dict = dict(sorted(input_dict.items(), key=lambda x: (-x[1], x[0])))
运行结果:
{'walter': 17, 'adrian': 16, 'andrew': 16, 'santiago': 15, 'simon': 15, 'robert': 13}
如果需要和示例输出一致(过滤掉值为13的robert项),可以在排序前加过滤逻辑:
sorted_dict = dict(sorted( (item for item in input_dict.items() if item[1] > 13), key=lambda x: (-x[1], x[0]) ))
运行结果和要求的示例完全一致:
{'walter':17, 'adrian':16, 'andrew':16, 'santiago':15, 'simon':15}
低版本Python兼容说明
Python 3.6及更早版本的内置字典不保留插入顺序,需要使用collections.OrderedDict构造有序字典:
from collections import OrderedDict sorted_dict = OrderedDict(sorted(input_dict.items(), key=lambda x: (-x[1], x[0])))
内容的提问来源于stack exchange,提问作者M_92
相关产品推荐
相关产品推荐

