我有一个字典,其中键作为单词和值作为整数。
是否可以按值对字典进行排序?
我希望能够在字典中找到前10个最常出现的单词。值表示单词计数,键表示单词。
counter = 9
for a,b in sorted(dict_.iteritems()):
if counter > 0:
print str(a),str(b)+"\n"
counter-=1
这是我到目前为止所做的,但它只打印字典中的前10个项目。我如何打印最常见的十大项目? (即int值最高的值为?)
答案 0 :(得分:2)
Python词典是无序的,但您可以使用items()
将其转换为元组列表,并将适当的比较函数传递给sort
的{{1}}参数。
sorted()
有一个类似的关键参数。您希望按key
排序,以便从lambda item: item[1]
和items()
中获取值。然后你可以切掉前N个项目。
因此...
iteritems()
答案 1 :(得分:2)
尝试sorted(dict_.iteritems(), key=lambda item: -item[1])
。
答案 2 :(得分:2)
使用
sorted(dict_.iteritems(), key=lambda x:x[1])
或
import operator
sorted(.... key=operator.itemgetter(1))
根据元素值进行排序。您可以使用reverse=True
参数来反转结果的顺序(默认oder是升序值)和切片表示法(results[:10]
)以仅迭代前10个元素。您也可以省略反向标记,并使用[-10:]
获得前10名。
答案 3 :(得分:1)
你根本无法对dicts进行排序。它们是无序的,即订单未定义且完全没有意义(对你而言)。
但是,您可以使用.iteritems()
对key=operator.itemgetter(1)
进行排序(其他答案会否定该值,但您可以使用切片[-10:]
来获取最后10个项目)。或者,在这种特殊情况下,只需使用collections.Counter
方法附带的.most_common(n)
。
答案 4 :(得分:0)
为了做到这一点,你应该使用key
参数对其进行排序。 key
必须是一个函数,它将一个元素作为输入并返回另一个应该是可排序的函数,它将使用该键对整个元素进行排序。并取最后10个元素(按升序排序)。在你的情况下,你需要做这样的事情:
for a,b in sorted(key=lambda x: (x[1], x[0]), dict_.iteritems())[-10:]:
print str(a), str(b)