python字典排序本质是生成新有序结构,按键用sorted(d.items()),按值需key=lambda x: x[1];值类型不一致时应统一转换或自定义key;3.7+可用dict()还原,旧版用ordereddict。

Python字典本身无序(3.7+虽保持插入顺序,但排序仍需显式操作),要按键或值排序,本质是生成**新的有序结构**——通常是列表(含元组)或新字典。关键不是“给字典排序”,而是“用字典数据构造有序结果”。
按字典的键(key)排序
使用 sorted() 配合字典的 .keys() 或直接传入字典(默认迭代 key):
-
→ 得到排序后的键列表:
sorted(d)或sorted(d.keys()) -
→ 得到键值对元组列表(按键):
sorted(d.items())(因元组排序默认比第一项,即 key) -
→ 构建新有序字典(Python 3.7+):
dict(sorted(d.items()))
按字典的值(value)排序
核心是用 key= 参数指定排序依据,通常配合 lambda 或 operator.itemgetter:
-
→ 值升序的键值对列表:
sorted(d.items(), key=lambda x: x[1]) -
→ 值降序(加 reverse=True):
sorted(d.items(), key=lambda x: x[1], reverse=True) -
→ 用 itemgetter 更简洁(需导入):
from operator import itemgetter; sorted(d.items(), key=itemgetter(1))
处理值类型不一致或含 None 的情况
若值类型不可比(如混有 str 和 int)或含 None,直接排序会报错。需统一转换或自定义 key 函数:
立即学习“Python免费学习笔记(深入)”;
-
→ 转为字符串再排(稳妥但逻辑可能变):
sorted(d.items(), key=lambda x: str(x[1])) -
→ 把 None 当最小/最大值处理:
sorted(d.items(), key=lambda x: (x[1] is None, x[1]))(None 排最前) -
→ 数值优先,其他转 0 或跳过(按需调整):
key=lambda x: x[1] if isinstance(x[1], (int, float)) else 0
排序后想还原成字典?注意版本差异
Python 3.7+ 中 dict(sorted(...)) 可保留顺序;旧版本建议用 collections.OrderedDict:
-
→ 兼容写法(推荐):
from collections import OrderedDict; OrderedDict(sorted(d.items(), key=lambda x: x[1])) -
→ 3.7+ 简洁写法:
dict(sorted(d.items(), key=lambda x: x[1])) -
→ 若只要值列表(不要键):
[v for k, v in sorted(d.items(), key=lambda x: x[1])]










