按值的INT值对字典排序

2024-09-29 01:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有很多关于用Python对字典进行排序的帖子,所以我仔细阅读了它们,希望这不是重复的:

我用字典把单词作为键,把单词的出现作为值。这就产生了一个字典,可以是:

John 1
Robert 5
Susie 15
Alex 6

我想按出现次数对它们进行排序(“值”)

^{pr2}$

我正在使用以下代码尝试按如下方式对词典进行排序:

sorted_words = sorted(words.iteritems(), key=itemgetter(1))

但是,这将返回一个排序后的元组列表,如下所示:

John 1
Susie 15
Robert 5
Alex 6

您可以看到问题是,对于上面的代码,这些值是按字母顺序排序的,因此15跟在1后面,即使数学上15>;5和6等等应该是最后一个。在

如何修复代码以将值视为int而不是字符串


Tags: 代码字典排序方式john单词次数robert
3条回答

如果你在寻找按出现次数排序的单词,你真的希望使用一个Counter,这基本上是一个预先构建的直方图,它将为你处理所有这些,甚至允许你调用函数most_common来从字典中获取最常见的元素。在

from colletions import Counter

string = "There there are some some words here here"
test = Counter(string.split())
>>> test.most_common(2)
[('some', 2), ('here', 2)]

如果由于某种原因,这不适合您的应用程序,您可以(正如其他人所建议的那样),对字典进行如下排序:

^{pr2}$

但是Counter似乎更适合您的应用程序。在

必须在键表达式中将值转换为整数。使用

sorted_words = sorted(words.iteritems(), key=lambda x: int(x[1]))

尝试类似key=int(itemgetter(1))的方法可能很诱人,但这行不通,因为key参数需要一个函数。在

对于这种事,我倾向于

sorted_pairs = sorted(words.iteritems(), key=lambda p: p[1])

上面假设words中的值确实是数字。如果不是这样的话,我会的

^{pr2}$

(在最后一个表达式中使用float而不是int的原因很简单:即使值开始包含浮点数,代码也保持不变。)

相关问题 更多 >