杰瑞科技汇

Python字典如何按key排序?

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

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

方法 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:按值排序(附带按键排序)

如果需要先按值排序,值相同时再按键排序:

Python字典如何按key排序?-图2
(图片来源网络,侵删)
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 函数 所有版本

选择适合你的场景的方法即可!

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