在 Python 中,字典(dict)本身是无序的(在 Python 3.7 之前),但你可以通过多种方式对字典按键(key)排序,并返回一个新的有序字典或列表,以下是几种常见的方法:

方法 1:使用 sorted() + 字典推导式(Python 3.7+)
Python 3.7+ 的字典会保持插入顺序,因此可以通过 sorted() 对键排序后重新构建字典:
my_dict = {'banana': 3, 'apple': 1, 'pear': 2, 'orange': 4}
# 按键排序(升序)
sorted_dict = {k: my_dict[k] for k in sorted(my_dict)}
# 按键排序(降序)
sorted_dict_desc = {k: my_dict[k] for k in sorted(my_dict, reverse=True)}
print(sorted_dict) # {'apple': 1, 'banana': 3, 'orange': 4, 'pear': 2}
print(sorted_dict_desc) # {'pear': 2, 'orange': 4, 'banana': 3, 'apple': 1}
方法 2:使用 collections.OrderedDict(Python 3.6 及以下)
在 Python 3.6 及更早版本中,字典不保证顺序,需使用 OrderedDict:
from collections import OrderedDict
my_dict = {'banana': 3, 'apple': 1, 'pear': 2, 'orange': 4}
sorted_dict = OrderedDict((k, my_dict[k]) for k in sorted(my_dict))
print(sorted_dict) # OrderedDict([('apple', 1), ('banana', 3), ('orange', 4), ('pear', 2)])
方法 3:返回键值对列表(不修改原字典)
如果不需要新字典,只需排序后的键值对列表:
my_dict = {'banana': 3, 'apple': 1, 'pear': 2, 'orange': 4}
# 按键排序的键值对列表(升序)
sorted_items = sorted(my_dict.items(), key=lambda item: item[0])
# 按键排序的键值对列表(降序)
sorted_items_desc = sorted(my_dict.items(), key=lambda item: item[0], reverse=True)
print(sorted_items) # [('apple', 1), ('banana', 3), ('orange', 4), ('pear', 2)]
print(sorted_items_desc) # [('pear', 2), ('orange', 4), ('banana', 3), ('apple', 1)]
方法 4:按值排序(附带按键排序)
如果需要先按值排序,值相同时再按键排序:

my_dict = {'banana': 3, 'apple': 1, 'pear': 2, 'orange': 4}
# 先按值升序,值相同时按键升序
sorted_by_value_then_key = sorted(
my_dict.items(),
key=lambda item: (item[1], item[0])
)
print(sorted_by_value_then_key)
# [('apple', 1), ('pear', 2), ('banana', 3), ('orange', 4)]
| 需求 | 方法 | 适用版本 |
|---|---|---|
| 按键排序并返回新字典 | 字典推导式 + sorted() |
Python 3.7+ |
| 按键排序并返回有序字典 | OrderedDict |
所有版本 |
| 仅返回排序后的键值对列表 | sorted(my_dict.items()) |
所有版本 |
| 先按值再按键排序 | 自定义 key 函数 |
所有版本 |
选择适合你的场景的方法即可!

