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

Python 如何在dict中从1000中找出30个最大的数字?,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,这是我的字典: d['any1'] = 15 d['any2'] = 27 d['any3'] = 84 d['any4'] = 12 d['any5'] = 7 .... d['any1243'] = 24 是否有任何python工具可以帮助我在字典中从1243中找出30个最大的数字 谢谢 你最好使用计数器s通过以下方式明确支持此用例: 返回n个最常见元素的列表及其从最常见到最少的计数 在这里,您实际使用的是计数器()对象,而不是开始使用dCounter对象是一个dict子类,因此当您跟踪每

这是我的字典:

d['any1'] = 15
d['any2'] = 27
d['any3'] = 84
d['any4'] = 12
d['any5'] = 7
....
d['any1243'] = 24
是否有任何python工具可以帮助我在字典中从1243中找出30个最大的数字


谢谢

你最好使用<代码>计数器s通过以下方式明确支持此用例:

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

在这里,您实际使用的是
计数器()
对象,而不是开始使用
d
Counter
对象是一个
dict
子类,因此当您跟踪每键频率时,可以使用它们作为插入式替换,尽管在许多情况下它们使项目计数更容易

如果您无法使用常规词典,那么您可以使用以下工具自己实现此功能:

其中,
three\u max
是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
>>导入heapq
>>>从运算符导入itemgetter
>>>随机输入
>>>d={'any{}'。格式(i):random.randrange(5000)表示范围(1243)中的i}
>>>对于键,heapq.nlargest(30,d.iteritems(),key=itemgetter(1))中的值:
...     打印“{:4}”。格式(键、值)
... 
any12264997
any11504997
any12254993
any4014992
any949488
any130 4978
any10694977
Any964974
any9554974
any2294970
any11174966
any8834964
any9374961
any7294958
Any9814958
Any74952
任何10454952
any600 4950
any134 4948
any16 4937
any3124937
Any11584937
任何12384932
any3154932
any8754930
any3394930
any2954926
any8784925
any34344922
任何6814917

您最好使用<代码>计数器s通过以下方式明确支持此用例:

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

在这里,您实际使用的是
计数器()
对象,而不是开始使用
d
Counter
对象是一个
dict
子类,因此当您跟踪每键频率时,可以使用它们作为插入式替换,尽管在许多情况下它们使项目计数更容易

如果您无法使用常规词典,那么您可以使用以下工具自己实现此功能:

其中,
three\u max
是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
>>导入heapq
>>>从运算符导入itemgetter
>>>随机输入
>>>d={'any{}'。格式(i):random.randrange(5000)表示范围(1243)中的i}
>>>对于键,heapq.nlargest(30,d.iteritems(),key=itemgetter(1))中的值:
...     打印“{:4}”。格式(键、值)
... 
any12264997
any11504997
any12254993
any4014992
any949488
any130 4978
any10694977
Any964974
any9554974
any2294970
any11174966
any8834964
any9374961
any7294958
Any9814958
Any74952
任何10454952
any600 4950
any134 4948
any16 4937
any3124937
Any11584937
任何12384932
any3154932
any8754930
any3394930
any2954926
any8784925
any34344922
任何6814917

对于这么多的值,您可以通过以下几行完成:

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

对于这么多的值,您可以通过以下几行操作:

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

可能
d
是一个dictionary对象,op正在访问它的键?@NWard:在第一次修订中没有
d
。-)可能
d
是一个dictionary对象,op正在访问它的键?@NWard:在第一次修订中没有
d
。-)对于排名前30位的人来说,一个完整的分类是多余的。
heapq
方法对于较大数量的项目要快得多。请注意,只有在列出的项目数量没有限制时,才会使用
sorted()
。对于
。最常见的(30)
heapq
的使用方式与我的答案完全一致。事实上,我只想指出,如果项目数量与OP所述相同,则更“幼稚”的方法效果更好。对于排名前30位的项目,完全排序是多余的。
heapq
方法对于较大数量的项目要快得多。请注意,只有在列出的项目数量没有限制时,才会使用
sorted()
。对于
。最常见的(30)
heapq
的使用方式与我的答案完全一致。事实上,我只想指出一种更“幼稚”的方法,如果项目的数量与OP所说的相同,那么这种方法可以很好地工作。