Python
容器資料型態
dict
分类

对 Python 字典排序:解释和示例

Python 字典是一种有用的数据结构,它以键值对的形式存储数据。

然而,字典默认不排序,有时您需要按特定顺序对字典中的数据排序。

本文将介绍如何对 Python 字典排序。 具体内容如下。

  1. 按键排序
  2. 按值排序(lambda 函数)
  3. 按多个值或降序排序
  4. 对多个字典排序
  5. 对 Python 列表中的字典排序
  6. 对字典输出排序

1. 按键排序

要按键排序字典,可以使用内置函数 sorted()

按键排序字典时,按键排序的顺序是有保证的,排序结果也很容易预测。 由于键可以唯一标识每个键值对,因此按键排序可以帮助你快速浏览字典或查找所需信息。

dictionary = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(dictionary.items()))
print(sorted_dict)
 
# Output
{'a': 1, 'b': 2, 'c': 3}

2. 按值排序(lambda 函数)

要按值对字典排序,可在 sorted() 函数的 key 参数中使用 lambda 函数,按值对字典排序。

按值对字典排序可确保按值排序,从而更容易查看值的分布或模式。

通过 lambda 函数,可以轻松设置基于值的限定条件。lambda函数是一个匿名函数,可用于实现简单的函数。

dictionary = {'a': 3, 'b': 1, 'c': 2}
sorted_dict = dict(sorted(dictionary.items(), key=lambda item: item[1]))
print(sorted_dict)
 
# Output
{'b': 1, 'c': 2, 'a': 3}

3. 对多个值或按降序排序

3.1. 按多个值排序

当一个字典有多个值时,按这些值排序就比较复杂了,尤其是当这些值是有序数据类型(如元组或列表)时。

例如,假设有一个字典,其键和值如下所示。

dict_to_sort = {'a': (2, 3), 'b': (1, 3), 'c': (1, 2), 'd': (2, 2)}

在这里,值是一个包含两个元素的元组。要按键和第一个元素,然后是第二个元素排序,可以写这样的代码

sorted_dict = dict(sorted(dict_to_sort.items(), key=lambda item: (item[0], item[1][0], item[1][1])))
 
print(sorted_dict)
 
# Output
{'b': (1, 3), 'c': (1, 2), 'a': (2, 3), 'd': (2, 2)}

key=lambda item: (item[0], item[1][0], item[1][1]) 部分是指定排序键的代码。

这里,item[0] 表示字典的键,item[1][0] 表示作为字典值的元组的第一个元素,item[1][1] 表示作为字典值的元组的第二个元素。

因此,这段代码按键排序字典,然后按元组的第一个元素排序,再按第二个元素排序。

这样,你就可以按多个值对字典进行排序,将组成字典值的每个元素作为排序的基础。

3.2. 降序排序

要对字典进行降序排序,可以将 sorted() 函数的 reverse 参数设置为 True

例如,假设您有一个类似下面这样的字典。

my_dict = {'b': 5, 'a': 9, 'c': 7}

要按键以降序对字典排序,可以采取以下方法

sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[0], reverse=True))
 
print(sorted_dict)
 
# Output
{'c': 7, 'b': 5, 'a': 9}

同样,如果要按值以降序对该字典排序,可以执行以下操作

sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[1], reverse=True))
 
print(sorted_dict)
 
# Output
{'a': 9, 'c': 7, 'b': 5}

其中 key=lambda item: item[0]key=lambda item: item[1] 是指定排序条件的代码、 reverse=True告诉字典按此标准以降序排序。

4. 对多个字典排序

当一个字典中包含另一个字典时,它被称为 "嵌套字典"。 嵌套字典对于分层结构化数据非常有用,在 JSON 等数据格式中经常出现。

不过,对嵌套字典排序可能有点麻烦。您需要根据外层字典中的键或内层字典中的键或值进行排序。

例如,假设有一个以 "用户名 "为键的嵌套字典,以及一个以 "年龄 "和 "地址 "为值的字典,如下图所示。

nested_dict = {'John': {'age': 25, 'address': '123 St'},
                'Jane': {'age': 23, 'address': '456 St'},
                'Dave': {'age': 30, 'address': '789 St'}}

要按 "年龄 "对嵌套字典进行排序,可以编写如下代码

sorted_dict = dict(sorted(nested_dict.items(), key=lambda item: item[1]['age']))
print(sorted_dict)
 
# Output
{'Jane': {'age': 23, 'address': '456 St'},
'John': {'age': 25, 'address': '123 St'},
'Dave': {'age': 30, 'address': '789 St'}}

key=lambda项目:item[1]['年龄']部分是指定按 "年龄 "排序的排序键的代码。 在本例中,item[1] 表示字典的值,也就是另一部字典。

因此,item[1]['age'] 将是从嵌套字典中获取 "年龄 "值的代码。

通过这种方式组织嵌套字典,您就可以根据每个层次轻松地理解和管理数据。 当然,嵌套层级越深,排序就越复杂,但原理是一样的。

5. 在 Python 列表中对字典排序

要对列表中的字典排序,请在 key 参数中指定要排序的字典的键。

list_of_dict = [{'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 23}, {'name': 'Dave', 'age': 30}]
sorted_list_of_dict = sorted(list_of_dict, key=lambda d: d['age'])
 
print(sorted_list_of_dict)
 
# Output
[{'name': 'Jane', 'age': 23}, {'name': 'John', 'age': 25}, {'name': 'Dave', 'age': 30}]

6. 排序字典输出

要对字典进行排序和输出,可使用 for 语句遍历键值对。

dictionary = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(dictionary.items()))
 
for key, value in sorted_dict.items():
    print(f"{key}: {value}")
 
# Output
a: 1
b: 2
c: 3

结论

到目前为止,我们已经介绍了与 Python 字典排序相关的六个主题。 希望这些内容能对您今后的实际工作有所帮助。

copyright for 对 Python 字典排序:解释和示例

© 2023 All rights reserved.