如何对Python字典按值排序,值相同时按键的字母顺序排序?
Python字典按值排序,值相同时按键字母序排序
问题描述
现有Python字典:
my_dictionary = {'a': 1, 'b': 3, 'f': 2, 'k': 2, 'l': 2, 'p': 2, 'g': 1}
需要按值降序排序,当值相同时,按键的字母升序排序,最终得到目标字典:
i_want = {'b': 3, 'f': 2, 'k': 2, 'l': 2, 'p': 2, 'a': 1, 'g': 1}
解决方案
Python 3.7及以上版本的字典会保留插入顺序,因此我们可以先对字典的键值对进行排序,再重新构建字典。
核心逻辑
- 排序优先级1:按值降序排列
- 排序优先级2:值相同时,按键的字母升序排列
代码实现
my_dictionary = {'a': 1, 'b': 3, 'f': 2, 'k': 2, 'l': 2, 'p': 2, 'g': 1} # 对键值对列表排序:先按值降序,值相同则按键升序 sorted_pairs = sorted(my_dictionary.items(), key=lambda item: (-item[1], item[0])) # 转换为有序字典(Python3.7+直接用dict即可) i_want = dict(sorted_pairs) print(i_want) # 输出结果:{'b': 3, 'f': 2, 'k': 2, 'l': 2, 'p': 2, 'a': 1, 'g': 1}
代码说明
sorted()函数的key参数使用lambda表达式:-item[1]通过取负值实现值的降序排序;item[0]作为次要排序条件,实现键的字母升序排序- Python 3.7之前的版本可以使用
collections.OrderedDict来保存排序后的顺序,替换最后一步的dict()为OrderedDict()即可
内容的提问来源于stack exchange,提问作者uriel
相关产品推荐
相关产品推荐

