按python中的值排序字典

时间:2011-04-13 18:05:41

标签: python sorting dictionary

我有一个字典,其中键作为单词和值作为整数。

是否可以按值对字典进行排序?

我希望能够在字典中找到前10个最常出现的单词。值表示单词计数,键表示单词。

counter = 9
for a,b in sorted(dict_.iteritems()):
        if counter > 0:
            print str(a),str(b)+"\n"
            counter-=1

这是我到目前为止所做的,但它只打印字典中的前10个项目。我如何打印最常见的十大项目? (即int值最高的值为?)

5 个答案:

答案 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)