如何按值对字典进行排序?

发布时间 2023-10-27 11:41:11作者: 小满独家

内容来自 DOC https://q.houxu6.top/?s=如何按值对字典进行排序?

我从一个数据库中的两个字段读取一个字典的值:一个字符串字段和一个数字字段。字符串字段是唯一的,所以它是字典的键。

我可以按键进行排序,但是我如何根据值进行排序呢?

注意:我在这里阅读了 Stack Overflow 问题 如何根据字典的值对字典列表进行排序? 并且可能可以更改我的代码以拥有一个字典列表,但由于我真的不需要一个字典列表,我想知道是否有一种更简单的解决方案来按照升序或降序排序。


Python 3.7+ 或 CPython 3.6

在 Python 3.7+ 中,字典保留插入顺序。在 CPython 3.6 中也是相同的,但这是一个实现细节。

>>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
>>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

>>> dict(sorted(x.items(), key=lambda item: item[1]))
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

旧版本的 Python

无法对字典进行排序,只能获得一个已排序的字典表示形式。字典本质上是无序的,但其他类型,如列表和元组,不是。因此,您需要一个有序的数据类型来表示已排序的值,这将是一个列表——可能是一个元组列表。

例如,

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))

sorted_x 将是一个按元组中第二个元素排序的元组列表。dict(sorted_x) == x

如果您想按键而不是值进行排序:

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))

在 Python3 中,由于不允许解包,我们可以使用

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])

如果您想要输出为字典,您可以使用 [collections.OrderedDict]:

import collections

sorted_dict = collections.OrderedDict(sorted_x)