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

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

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

注意:我已阅读Stack Overflow问题如何按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))

简单如下: sorted(dict1, key=dict1.get)

那么,它实际上可以做一个“按字典值排序”。 最近我不得不在Code Golf中做这件事(Stack Overflow question Code golf:Word frequency chart)。 摘要的问题是这样的:给定一个文本,计算每个单词遇到的频率并显示一个顶级单词列表,按照频率降低排序。

如果您构造一个字典,其中的关键词和每个词的出现次数为值,在此简化为:

from collections import defaultdict
d = defaultdict(int)
for w in text.split():
  d[w] += 1

那么你可以得到一个单词列表,按照使用频率sorted(d, key=d.get) - 排序迭代字典键,使用单词出现次数作为排序关键字。

for w in sorted(d, key=d.get, reverse=True):
  print w, d[w]

我正在写这个详细的解释来说明人们通常所说的“我可以轻松地按键排序字典,但是我怎么按价值排序” - 我认为OP正试图解决这样的问题。 解决方案是根据数值对键进行排序,如上所示。


你可以使用:

sorted(d.items(), key=lambda x: x[1])

这将按字典中的每个条目从最小到最大的值对字典进行排序。

链接地址: http://www.djcxy.com/p/383.html

上一篇: How do I sort a dictionary by value?

下一篇: How do I update a GitHub forked repository?