Python 中如何对字典按键(或按值)排序?

Python 字典排序:sorted(d.items(), key=lambda x: x[0]) 按键排序,x[1] 按值排序,结果是元组列表;dict() 包回去得到有序字典。本文给出各种写法。

最佳实践
Python 中如何对字典按键(或按值)排序?封面

核心:sorted(d.items(), key=lambda x: x[0]) 按键排序,key=lambda x: x[1] 按值排序。排序结果是元组列表;Python 3.7+ 字典保持插入顺序,可以再 dict() 包回字典。

按键排序

d = {"c": 3, "a": 1, "b": 2}

sorted_items = sorted(d.items(), key=lambda x: x[0])
# [('a', 1), ('b', 2), ('c', 3)]

sorted_dict = dict(sorted_items)
# {'a': 1, 'b': 2, 'c': 3}

按值排序

d = {"a": 1, "c": 3, "b": 2}

# 升序
dict(sorted(d.items(), key=lambda x: x[1]))
# {'a': 1, 'b': 2, 'c': 3}

# 降序
dict(sorted(d.items(), key=lambda x: x[1], reverse=True))
# {'c': 3, 'b': 2, 'a': 1}

简化写法

只按键排序可以不写 key 函数——d.items() 的元组默认先按第一个元素(键)比较:

dict(sorted(d.items()))   # 按键升序

注意事项

  1. "排序后的字典"概念:3.7+ 字典有序,所以重建后的字典遍历时按排序顺序;但后续插入新键不会自动重排,修改值也不会维护按值排序;字典本质还是哈希表,不要依赖它做范围查询。
  2. 只需要顺序时用列表:很多场景保留元组列表就够了,不必转回字典。

常见问题(FAQ)

Q:按值排序时值相同怎么办?
A:排序稳定,保持原插入顺序;也可以加次级键:key=lambda x: (x[1], x[0])。

Q:值是数字和字符串混合?
A:数字与字符串通常无法直接排序,会抛 TypeError;int 和 float 等部分不同类型仍可比较。按业务定义统一的排序键。

Q:OrderedDict 还需要吗?
A:3.7+ 普通字典就有序,OrderedDict 仍支持高效重排、两端弹出,以及两个 OrderedDict 之间考虑顺序的相等比较;普通保留插入顺序的场景通常无需它。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台