Python 查找数值最高的字典键
给定以下形式的PythonPython 查找数值最高的字典键,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
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)]