如何在dict中从1000中找出30个最大的数字?

2024-10-02 22:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的字典:

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

有什么python工具可以帮我从字典里的1243中找出30个最大的数字吗?你知道吗

谢谢。你知道吗


Tags: 工具字典数字any3any1any2any1243any4
2条回答

对于这么多的值,您可以使用以下几行代码:

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

最好使用^{} objectCounter来支持这个用例,并使用^{} method

Return a list of the n most common elements and their counts from the most common to the least.

from collections import Counter

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

在这里,实际上使用Counter()对象而不是dCounter对象是dict子类,因此在跟踪每键频率时,可以使用它们作为插入式替换,尽管在许多情况下,它们使项目计数更容易。你知道吗

如果您使用的是常规词典,那么您可以使用^{} module,特别是^{} function,自己实现此功能:

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

相关问题 更多 >