对 Python 字典排序:解释和示例
Python 字典是一种有用的数据结构,它以键值对的形式存储数据。
然而,字典默认不排序,有时您需要按特定顺序对字典中的数据排序。
本文将介绍如何对 Python 字典排序。 具体内容如下。
- 按键排序
- 按值排序(lambda 函数)
- 按多个值或降序排序
- 对多个字典排序
- 对 Python 列表中的字典排序
- 对字典输出排序
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 字典排序相关的六个主题。 希望这些内容能对您今后的实际工作有所帮助。
