Python 查找数值最高的字典键

Python 查找数值最高的字典键,python,dictionary,Python,Dictionary,给定以下形式的Pythondict: 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 ke

给定以下形式的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

dict
转换为元组列表
[(2341,'Alice'),…]
然后对其排序(不带
key=lambda…
)。

我只需按第二个值对项目排序,然后选择第一个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个元素)没有太大区别

将5替换为要获取的元素数。

使用:

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

<> >使用<代码>排序<<代码>(<代码> o(n*log n)< />代码>,或<代码> HeAPq.nMax(k)< /C> >,可能比<代码> >排序<<代码>要快。如果<代码> k可能的副本,您可能会考虑先使用A代替字典。然后你有
字数。最常见的(x)
谢谢。这很有效。我不知道它是如何工作的,也不知道为什么工作的。
d_items=sorted(d.items(),key=lambda x:x[1],reverse=True)
,但是缺少
reverse=True
kwarg。@brunsgaard:注意lambda函数中的负号。这正是
reverse=True
对数字键所做的,它只短了几个字符。@Danstahr,doh,当然。。。你是巨蟒的老板!,忽略我上面的评论。
>>> (sorted(dict.items(), key=lambda x:x[1]))[:2]
[('Alice', 2341), ('Cecil', 3258)]
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)]
>>> from collections import Counter
>>> d = {'Alice': 2341, 'Beth': 9102, 'Cecil': 3258}
>>> c = Counter(d)
>>> c.most_common(2)
[('Beth', 9102), ('Cecil', 3258)]