0

这是我的字典:

d['any1'] = 15
d['any2'] = 27
d['any3'] = 84
d['any4'] = 12
d['any5'] = 7
....
d['any1243'] = 24

是否有任何 python 工具可以帮助我从字典中的 1243 中找到 30 个最大的数字?

谢谢。

4

2 回答 2

3

你最好使用一个collections.Counter()对象s 使用以下方法Counter显式支持此用例:Counter.most_common()

返回n 个最常见元素的列表及其从最常见到最少的计数。

from collections import Counter

counts = Counter(d)
for key, freq in counts.most_common(30):
    print key, freq

您实际使用该Counter()对象而不是开始d的地方。Counter对象是一个dict子类,因此当您跟踪每个键的频率时,您可以将它们用作替代品,尽管在许多情况下它们使计数项目变得更加容易。

如果你被常规字​​典卡住了,那么你可以使用heapq模块自己实现这个功能,特别是heapq.nlargest()函数

import heapq
from operator import itemgetter

thirty_largest = heapq.nlargest(30, d.iteritems(), key=itemgetter(1))

thirty_largest那么 30 个键值元组的列表在哪里:

>>> import heapq
>>> from operator import itemgetter
>>> import random
>>> d = {'any{}'.format(i): random.randrange(5000) for i in range(1243)}
>>> for key, value in heapq.nlargest(30, d.iteritems(), key=itemgetter(1)):
...     print '{:<7} {:>4}'.format(key, value)
... 
any1226 4997
any1150 4997
any1225 4993
any401  4992
any949  4988
any130  4978
any1069 4977
any96   4974
any955  4974
any229  4970
any1117 4966
any883  4964
any937  4961
any729  4958
any981  4958
any7    4952
any1045 4952
any600  4950
any134  4948
any16   4937
any312  4937
any1158 4937
any1238 4932
any315  4932
any875  4930
any339  4930
any295  4926
any878  4925
any343  4922
any681  4917
于 2013-09-09T10:09:57.830 回答
1

对于这么多值,您可以通过几行来完成,例如:

import operator
d = ...
s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
print s[:30]
于 2013-09-09T11:16:01.063 回答