在 Python 中,字典(dict)本身是无序的(在 Python 3.7+ 中,字典按照插入顺序保留,但这不是按值排序的),如果要对字典的值进行排序,通常需要先将字典的键值对转换为列表或其他可迭代对象,然后进行排序,最后可以选择将排序后的结果转换回字典(如果需要保留顺序)。

方法 1:使用 sorted() 函数和 key 参数
sorted() 函数可以接受任何可迭代对象,并通过 key 参数指定排序依据。
示例代码:
# 示例字典
my_dict = {'a': 4, 'b': 1, 'c': 3, 'd': 2}
# 按值升序排序
sorted_items = sorted(my_dict.items(), key=lambda item: item[1])
print(sorted_items) # 输出: [('b', 1), ('d', 2), ('c', 3), ('a', 4)]
# 按值降序排序
sorted_items_desc = sorted(my_dict.items(), key=lambda item: item[1], reverse=True)
print(sorted_items_desc) # 输出: [('a', 4), ('c', 3), ('d', 2), ('b', 1)]
说明:
my_dict.items()返回字典的键值对视图(dict_items),可以转换为列表[(key1, value1), (key2, value2), ...]。key=lambda item: item[1]表示按字典值的索引(即item[1])排序。reverse=True表示降序排序。
方法 2:使用 operator.itemgetter 替代 lambda
如果性能是关键,可以使用 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)]
# 按值降序排序
sorted_items_desc = sorted(my_dict.items(), key=itemgetter(1), reverse=True)
print(sorted_items_desc) # 输出: [('a', 4), ('c', 3), ('d', 2), ('b', 1)]
说明:
itemgetter(1)是lambda item: item[1]的更高效替代方案。
方法 3:排序后转换为有序字典(Python 3.7+)
如果需要将排序后的结果保留为字典(按插入顺序),可以使用 collections.OrderedDict(Python 3.7+ 的普通字典已经支持顺序,但 OrderedDict 仍然是显式选择)。
示例代码:
from collections import OrderedDict
# 示例字典
my_dict = {'a': 4, 'b': 1, 'c': 3, 'd': 2}
# 按值升序排序并转换为 OrderedDict
sorted_dict = OrderedDict(sorted(my_dict.items(), key=lambda item: item[1]))
print(sorted_dict) # 输出: OrderedDict([('b', 1), ('d', 2), ('c', 3), ('a', 4)])
# 按值降序排序
sorted_dict_desc = OrderedDict(sorted(my_dict.items(), key=lambda item: item[1], reverse=True))
print(sorted_dict_desc) # 输出: OrderedDict([('a', 4), ('c', 3), ('d', 2), ('b', 1)])
说明:
- 在 Python 3.7+ 中,普通字典已经保留插入顺序,因此可以直接用
dict(sorted(...))代替OrderedDict:sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[1]))
方法 4:仅排序值(不关心键)
如果只需要排序后的值列表,可以直接对 my_dict.values() 排序。

示例代码:
# 示例字典
my_dict = {'a': 4, 'b': 1, 'c': 3, 'd': 2}
# 按值升序排序
sorted_values = sorted(my_dict.values())
print(sorted_values) # 输出: [1, 2, 3, 4]
# 按值降序排序
sorted_values_desc = sorted(my_dict.values(), reverse=True)
print(sorted_values_desc) # 输出: [4, 3, 2, 1]
| 需求 | 方法 | 示例 |
|---|---|---|
| 按值排序键值对 | sorted(my_dict.items(), key=lambda x: x[1]) |
[('b', 1), ('d', 2), ('c', 3), ('a', 4)] |
| 按值降序排序 | sorted(my_dict.items(), key=lambda x: x[1], reverse=True) |
[('a', 4), ('c', 3), ('d', 2), ('b', 1)] |
| 高性能排序 | sorted(my_dict.items(), key=itemgetter(1)) |
[('b', 1), ('d', 2), ('c', 3), ('a', 4)] |
| 排序后保留字典顺序 | dict(sorted(my_dict.items(), key=lambda x: x[1])) |
{'b': 1, 'd': 2, 'c': 3, 'a': 4} |
| 仅排序值 | sorted(my_dict.values()) |
[1, 2, 3, 4] |
选择哪种方法取决于你的具体需求(是否需要键、是否需要保留顺序等)。

