<p>最好使用<a href="http://docs.python.org/2/library/collections.html#collections.Counter" rel="nofollow">^{<cd1>} object</a>;<code>Counter</code>来支持这个用例,并使用<a href="http://docs.python.org/2/library/collections.html#collections.Counter.most_common" rel="nofollow">^{<cd3>} method</a>:</p>
<blockquote>
<p>Return a list of the <em>n</em> most common elements and their counts from the most common to the least. </p>
</blockquote>
<pre><code>from collections import Counter
counts = Counter(d)
for key, freq in counts.most_common(30):
print key, freq
</code></pre>
<p>在这里,实际上使用<code>Counter()</code>对象<em>而不是<code>d</code>的</em>。<code>Counter</code>对象是<code>dict</code>子类,因此在跟踪每键频率时,可以使用它们作为插入式替换,尽管在许多情况下,它们使项目计数更容易。你知道吗</p>
<p>如果您使用的是常规词典,那么您可以使用<a href="http://docs.python.org/2/library/heapq.html" rel="nofollow">^{<cd8>} module</a>,特别是<a href="http://docs.python.org/2/library/heapq.html#heapq.nlargest" rel="nofollow">^{<cd9>} function</a>,自己实现此功能:</p>
<pre><code>import heapq
from operator import itemgetter
thirty_largest = heapq.nlargest(30, d.iteritems(), key=itemgetter(1))
</code></pre>
<p>其中<code>thirty_largest</code>是30个键值元组的列表:</p>
<pre><code>>>> 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
</code></pre>