如何从字典中找到 30 个最大的数字 1000



这是我的字典:

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

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

谢谢。

最好使用 collections.Counter() 对象; 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

对于这么多值,您可以在几行中执行此操作,例如:

import operator
d = ...
s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
print s[:30]

最新更新