查找值在数值上最高的字典键

时间:2014-05-26 22:44:12

标签: python dictionary

给定形式的Python dict

dict = {'Alice': 2341, 'Beth': 9102, 'Cecil': 3258, ......}

是否有一种简单的方法来打印具有最高数值的第一个x键?也就是说:

Beth   9102
Cecil  3258

目前这是我的尝试:

max = 0
max_word = ""
for key, value in w.word_counts.iteritems():
    if value > max:
        if key not in stop_words:
            max = value
            max_word = key

print max_word

6 个答案:

答案 0 :(得分:7)

我只是按第二个值对项目进行排序,然后选择前K个元素:

d_items = sorted(d.items(), key=lambda x: -x[1])
print d_items[:2]
[('Beth', 9102), ('Cecil', 3258)]

此方法的复杂性为O(N log N + K),与最佳O(N + K log K)不同(使用QuickSelect并仅对前K个元素进行排序)。

答案 1 :(得分:5)

使用collections.Counter.most_common

>>> from collections import Counter
>>> d = {'Alice': 2341, 'Beth': 9102, 'Cecil': 3258}
>>> c = Counter(d)
>>> c.most_common(2)
[('Beth', 9102), ('Cecil', 3258)]

它使用的sortedO(n*log n))或heapq.nlargest(k)可能比sorted k << n更快,max() k==1 {{1}} 1}}。

答案 2 :(得分:3)

>>> (sorted(dict.items(), key=lambda x:x[1]))[:2]
[('Alice', 2341), ('Cecil', 3258)]

答案 3 :(得分:1)

items = sorted(w.word_counts.items(), lambda x, y: cmp(x[1], y[1]), None, True) 
items[:5]

将5替换为您想要获得的元素数量。

答案 4 :(得分:1)

d = {'Alice': 2341, 'Beth': 9102, 'Cecil': 3258}

vs = sorted(d, key=d.get,reverse=True)

l = [(x,d.get(x)) for x in vs[0:2]]
n [4]: l
Out[4]: [('Beth', 9102), ('Cecil', 3258)]

答案 5 :(得分:0)

dict转换为元组列表[(2341, 'Alice'), ...],然后对其进行排序(不使用key=lambda ...)。