如何按值对字典排序?

时间 2009-03-05
阅读 1968499
点赞 3139
收藏 1029
连接gern-blanston

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

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

注意:我已经阅读了堆栈溢出问题How do I sort a list of dictionaries by values of the dictionary in 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中,因为不允许解包[1]我们可以使用

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