给定形式的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
答案 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)]
它使用的sorted
(O(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 ...
)。