杰瑞科技汇

Python字典如何按值或键排序?

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

Python字典如何按值或键排序?-图1
(图片来源网络,侵删)

以下是几种常见的字典排序方法:


按值(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 函数:

Python字典如何按值或键排序?-图2
(图片来源网络,侵删)
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() 转换回字典。

根据你的需求选择合适的排序方式!

Python字典如何按值或键排序?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇