杰瑞科技汇

python dict value排序

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

python dict value排序-图1
(图片来源网络,侵删)

方法 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() 排序。

python dict value排序-图2
(图片来源网络,侵删)

示例代码:

# 示例字典
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]

选择哪种方法取决于你的具体需求(是否需要键、是否需要保留顺序等)。

python dict value排序-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇