python中sorted()不能直接排序字典,但可通过排序items()等视图后构造新字典实现按键(默认)或按值(需lambda指定x[1])排序,支持reverse及多级排序(如lambda x: (-x[1], x[0]))。

Python 中 sorted() 函数本身不直接排序字典(因为字典是无序的映射类型),但可以通过对字典的键值对视图(如 d.keys()、d.values() 或 d.items())进行排序,再构造新字典实现按键或按值排序。
按键排序(默认行为)
字典的 items() 返回键值对组成的元组序列,每个元组形如 (key, value)。默认情况下,sorted() 对元组排序时先比第一个元素(即键),所以直接对 items() 排序就是按键升序:
- 用
dict(sorted(d.items()))得到按键升序的新字典 - 加
reverse=True可降序:dict(sorted(d.items(), reverse=True))
例如:
d = {'banana': 3, 'apple': 4, 'cherry': 1}sorted_by_key = dict(sorted(d.items()))
# → {'apple': 4, 'banana': 3, 'cherry': 1}
按值排序(常用场景)
需显式指定排序依据为元组的第二个元素(value),使用 key 参数配合 lambda:
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
-
dict(sorted(d.items(), key=lambda x: x[1])):按值升序 -
dict(sorted(d.items(), key=lambda x: x[1], reverse=True)):按值降序
注意:x[1] 是每个 (key, value) 元组中的值;若值不可比较(如混有字符串和数字),会报 TypeError。
sorted_by_value = dict(sorted(d.items(), key=lambda x: x[1]))
# → {'cherry': 1, 'banana': 3, 'apple': 4}
处理复杂排序逻辑
当需要多级排序(例如:先按值降序,值相同时按键升序),可在 lambda 中返回元组作为排序键:
-
key=lambda x: (-x[1], x[0]):负号实现值降序,同时保持键升序 - 或用
key=lambda x: (x[1], x[0])+reverse=True,但需注意元组逆序是逐元素生效,不如前者直观
例如:
d = {'banana': 3, 'apple': 3, 'cherry': 1}sorted_complex = dict(sorted(d.items(), key=lambda x: (-x[1], x[0])))
# → {'apple': 3, 'banana': 3, 'cherry': 1}(值相同则按键字母序排)
只获取排序后的键或值列表
如果不需要字典,仅需有序的键或值,可直接对 d.keys() 或 d.values() 调用 sorted():
sorted_keys = sorted(d.keys())sorted_values = sorted(d.values())- 若值类型不统一,可用
key参数做类型适配,比如sorted(d.values(), key=str)统一转为字符串比较
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










