按值的INT值对字典进行排序

时间:2014-02-10 01:44:31

标签: python sorting dictionary

这里有很多关于在Python中排序字典的帖子,所以我小心翼翼地阅读它们并希望这不是重复:

我正在使用字典将单词作为键并将单词的出现作为值。这导致字典可能像:

John 1
Robert 5
Susie 15
Alex 6

我想按事件('值')

对它们进行排序
John 1
Robert 5
Alex 6
Susie 15

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

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

然而,这将返回一个排序的元组列表,如下所示:

John 1
Susie 15
Robert 5
Alex 6

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

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

3 个答案:

答案 0 :(得分:4)

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

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

尝试类似key=int(itemgetter(1))之类的东西可能很诱人,但这不起作用,因为关键参数需要一个函数。

答案 1 :(得分:2)

如果你正在寻找按事件排序的单词,你真的想要使用Counter,这基本上是一个预先构建的直方图,可以为你处理所有这些,甚至让你调用函数{{ 1}}从字典中获取最常见的元素。

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)]

但是sorted_words = sorted(words.iteritems(), key=lambda value: float(value[1])) 似乎更适合您的应用。

答案 2 :(得分:1)

对于这类事情,我倾向于做类似

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

以上假设words中的值确实是数字。如果不是这样,那我就做

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

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