内容来自 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)
标签:按值,items,列表,key,sorted,排序,字典
From: https://www.cnblogs.com/xiaomandujia/p/17791910.html