擅长:python、mysql、java
<p>要做到这一点,最不切实际的方法是多了解一些实际的数据——具体来说,就是你可以拥有的最大值——然后这样做:</p>
<pre><code>def sortkey((k, v)):
return (maxval - v, k)
items = thedict.items()
items.sort(key=sortkey)
</code></pre>
<p>但是,除非您已经知道最大值,否则搜索最大值意味着在dict中循环一段额外的时间(使用<code>max(thedict.itervalues())</code>),这可能很昂贵。或者,S.Lott解决方案的keyfunc版本:</p>
<pre><code>def sortkey((k, v)):
return (-v, k)
items = thedict.items()
items.sort(key=sortkey)
</code></pre>
<p>另一种不关心类型的方法是比较函数:</p>
<pre><code>def sortcmp((ak, av), (bk, bv)):
# compare values 'in reverse'
r = cmp(bv, av)
if not r:
# and then keys normally
r = cmp(ak, bk)
return r
items = thedict.items()
items.sort(cmp=sortcmp)
</code></pre>
<p>这个解决方案实际上适用于任何类型的键和值,您希望在同一个键中混合使用升序和降序排序。如果您重视简洁,那么可以将sortcmp编写为:</p>
<pre><code>def sortcmp((ak, av), (bk, bv)):
return cmp((bk, av), (ak, bv))
</code></pre>