Python 字典排序

在 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 开发中对字典排序最标准、最常用的完整写法。

上一篇: Python 字典推导式

下一篇: Python 集合

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号