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所说的相同,那么这种方法可以很好地工作。