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:Python 3 混合类型比较抛 TypeError,先统一类型。

Q:OrderedDict 还需要吗?
A:3.7+ 普通字典就有序,OrderedDict 只剩一些特殊方法(move_to_end 等),一般场景不再需要。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台