在Python中,字典(dict)本身是无序的(在Python 3.7之前,但从Python 3.7开始,字典按照插入顺序保留顺序),如果需要对字典进行排序,通常是指对字典的键(keys)、值(values)或键值对(items)进行排序,然后生成一个新的有序字典或列表。

以下是几种常见的字典排序方法:
按值(values)排序
使用 sorted() 函数结合 dict.items(),并通过 key 参数指定按值排序。
my_dict = {'a': 4, 'b': 1, 'c': 3, 'd': 2}
# 按值升序排序,返回列表
sorted_items = sorted(my_dict.items(), key=lambda x: x[1])
print(sorted_items) # [('b', 1), ('d', 2), ('c', 3), ('a', 4)]
# 按值降序排序
sorted_items_desc = sorted(my_dict.items(), key=lambda x: x[1], reverse=True)
print(sorted_items_desc) # [('a', 4), ('c', 3), ('d', 2), ('b', 1)]
# 转换为有序字典(Python 3.7+)
from collections import OrderedDict
sorted_dict = OrderedDict(sorted_items)
print(sorted_dict) # OrderedDict([('b', 1), ('d', 2), ('c', 3), ('a', 4)])
按键(keys)排序
类似地,可以按键排序:
my_dict = {'b': 2, 'a': 1, 'd': 4, 'c': 3}
# 按键升序排序
sorted_items = sorted(my_dict.items(), key=lambda x: x[0])
print(sorted_items) # [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# 转换为字典(Python 3.7+ 会保持顺序)
sorted_dict = dict(sorted_items)
print(sorted_dict) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
按键或值的自定义规则排序
如果需要更复杂的排序逻辑(例如按值的绝对值、字符串长度等),可以自定义 key 函数:

my_dict = {'a': -4, 'b': 1, 'c': 3, 'd': -2}
# 按值的绝对值升序排序
sorted_items = sorted(my_dict.items(), key=lambda x: abs(x[1]))
print(sorted_items) # [('b', 1), ('d', -2), ('c', 3), ('a', -4)]
多级排序(先按键,再按值)
如果需要先按一个条件排序,再按另一个条件排序,可以使用元组作为 key:
my_dict = {'a': 2, 'b': 1, 'A': 3, 'B': 4}
# 先按字母顺序(忽略大小写),再按值升序
sorted_items = sorted(my_dict.items(), key=lambda x: (x[0].lower(), x[1]))
print(sorted_items) # [('a', 2), ('A', 3), ('b', 1), ('B', 4)]
使用 operator 模块(更高效)
对于大型字典,使用 operator.itemgetter 可能比 lambda 更高效:
from operator import itemgetter
my_dict = {'a': 4, 'b': 1, 'c': 3, 'd': 2}
# 按值排序
sorted_items = sorted(my_dict.items(), key=itemgetter(1))
print(sorted_items) # [('b', 1), ('d', 2), ('c', 3), ('a', 4)]
- Python 3.7+:字典默认按插入顺序保留顺序,直接用
dict(sorted_items)可以生成有序字典。 - Python 3.6及以下:需要用
collections.OrderedDict来保持顺序。 - 排序后通常返回
(key, value)元组的列表,可以用dict()或OrderedDict()转换回字典。
根据你的需求选择合适的排序方式!

