python字典按value排序需先调用items()转为元组列表,再用sorted(dict.items(), key=lambda x: x[1])实现升序,reverse=true可降序;结果转字典用dict()在3.7+保持顺序。

Python 字典本身无序,想按 value 排序,必须转成有序结构(如列表),sorted() 配合 lambda 是最直接的方式——但别直接对字典调用 sorted(dict),那排的是 key。
sorted(dict.items(), key=lambda x: x[1]) 返回排序后的元组列表
字典的 items() 返回 dict_items 视图,内容是 (key, value) 元组。要按 value 排,key 参数就得取每个元组的第 2 个元素(索引为 1):
data = {'a': 3, 'b': 1, 'c': 2}
sorted_items = sorted(data.items(), key=lambda x: x[1])
# 结果:[('b', 1), ('c', 2), ('a', 3)]
-
lambda x: x[1]中的x就是每个(k, v)元组,x[1]即 value - 升序是默认行为;降序加
reverse=True - 如果 value 是字符串、None 或混合类型,会抛
TypeError,得先统一类型或加异常处理
想得到新字典?用 dict() 包一层,但注意 Python 版本
把排序后的元组列表转回字典,用 dict(sorted_items) 最简洁:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
sorted_dict = dict(sorted(data.items(), key=lambda x: x[1])) # Python 3.7+ 保持插入顺序,结果是有序字典
- Python 3.6 及更早版本中,
dict不保证顺序,此时应改用collections.OrderedDict - 不要写
{k: v for k, v in sorted(...)}——语义冗余,且在旧版本仍不保序 - 若 value 有重复,排序后顺序取决于原始插入顺序(稳定排序),但字典 key 不可重复,这点不影响结果
value 是复杂类型(如 list、dict、自定义对象)时,lambda 要明确提取依据
比如 value 是字典,想按其中的 'score' 字段排序:
data = {'user1': {'score': 85}, 'user2': {'score': 92}}
sorted_items = sorted(data.items(), key=lambda x: x[1]['score'])
- 直接写
x[1].get('score', 0)可防 KeyError - 如果 value 是
None,x[1]['score']会报错,而x[1] and x[1].get('score')更稳妥 - 避免在 lambda 里写多行逻辑;太复杂就提成独立函数,再传给
key=
真正容易卡住的不是语法,而是忘记 items() 这一步——直接 sorted(d, key=lambda x: d[x]) 虽能跑,但效率低(每次查 value 都触发哈希查找),还可能因 key 不存在出错。按 value 排序,起点永远是 dict.items()。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










