这里有很多关于在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而不是字符串
答案 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
的原因只是一般性:即使您的值开始包含浮点数,代码也保持不变。)