在 Python 3.6 之前,字典本质上是无序的。但从 Python 3.7 开始,字典则变成有序的,此时我们可以对字典进行排序。
Python 字典排序语法
在 Python 中,我们可以使用 sorted() 函数对字典进行排序。默认情况下,sorted() 会根据键(key)的值来进行排序。
语法:
sorted(iterable, key=None, reverse=False)说明:
sorted() 函数接收以下 3 个参数。
iterable(必选):是一个可迭代对象,比如字典、列表、元组等。key(可选):用于排序比较的函数,默认为 None。reverse(可选):用于排序的规则,默认为 False。如果为 True,则表示降序排列;如果为 False,则表示升序排列。
Python 字典排序示例
接下来,我们通过几个简单的示例来讲解 Python sorted() 函数是如何使用的。
示例 1:sorted() 对字典排序
d = {'b': 2, 'c': 3, 'a': 1}
result = sorted(d)
print(result)运行结果如下。
['a', 'b', 'c']分析:
sorted() 函数对字典排序,其实是对键( key)进行排序。此时 sorted() 会返回一个列表,该列表包含排序后的键。
对于上面示例而言,如果希望返回的不是 ['a', 'b', 'c'],而是 [('a', 1), ('b', 2), ('c', 3)],应该怎么实现呢?此时可以使用 Python lambda 表达式来实现,请看下面示例。
示例 2:字典按键排序
d = {'b': 2, 'c': 3, 'a': 1}
result = sorted(d.items(), key=lambda x: x[0])
print(result)运行结果如下。
[('a', 1), ('b', 2), ('c', 3)]分析:
在 sorted() 函数中,d.items() 得到的是 dict_items([('b', 2), ('c', 3), ('a', 1)]),这是一个元素为 (key, value) 的可迭代对象。是不是很像前面列表例子中的 [('Tony', 24), ('Jack', 21), ('Lucy', 23)] 呢?如果能发现这一点,后面就很好办了,操作起来是一样的。
示例 3:字典按值排序
d = {'b': 3, 'c': 1, 'a': 2}
result = sorted(d.items(), key=lambda x: x[1])
print(result)运行结果如下。
[('c', 1), ('a', 2), ('b', 3)]分析:
按值排序也非常简单,只需要改变一下 lambda 表达式的返回值就可以了。
示例 4:返回一个排序后的新字典
d = {'b': 3, 'c': 1, 'a': 2}
# 先按值排序,得到列表,然后再用 dict() 转换为字典
result = dict(sorted(d.items(), key=lambda x: x[1]))
print(result)运行结果如下。
{'c': 1, 'a': 2, 'b': 3}分析:
由于从 Python 3.7 开始,字典能够记住元素的插入顺序。所以当我们把排序好的列表传给 dict() 函数时,生成的新字典自然也就变成有序的了。这也是目前 Python 开发中对字典排序最标准、最常用的完整写法。
