<p>你有两个选择。您可以使用<code>cmp</code>或<code>key</code>作为<code>sorted</code>的参数。在</p>
<p>使用<code>cmp</code>可以定义一个接受两个参数的函数,这两个值将被比较。如果第一个参数小于第二个参数,则返回一个负数。如果它大于秒,则返回一个正数。如果它们相等,则返回0。在</p>
<p>使用<code>cmp</code>的第一个示例:</p>
<pre><code>pts = ['2', '2', '2', '2', '2', '0', '0', '0', '0']
teams = ['T Leach', 'M Cameron', 'D Dupuis', 'C Hearder', 'R Pagani',
'J Schutz', 'D Clark', 'B Hunter']
def custom_cmp(x,y):
return cmp(x[0], y[0]) or cmp(y[1], x[1])
pts, teams = zip(*sorted(zip(pts, teams), cmp=custom_cmp, reverse=True))
</code></pre>
<p>如果python <code>or</code>运算符的计算结果为<code>True</code>(而不是如上所述的<code>0</code>),那么它将返回左手边。因此,如果这些点不相等,<code>custom_cmp</code>返回从<code>x</code>到{<cd11>}的点的比较。否则,它将比较<code>y</code>到{<cd10>}(相反顺序)的团队。在</p>
<p>另一方面,对于<code>key</code>,您只是在考虑如何单独地查看元素,以便python能够自然地理解如何按您想要的方式对元素进行排序。我们知道第一个项目正在进行适当的比较,所以现在我们只需要翻转第二个项目。数字很简单,我们可以接受负数。但是你怎么翻线呢?在</p>
<p>一种方法是获取字符串中每个字符的<code>ord</code>(它应该是字符串的ascii值整数)。然后你可以取这些值的负数并将它们打包成一个<code>tuple</code>。以下是其中一个的样子:</p>
^{pr2}$
<p>使用<code>key</code>的第二个示例:</p>
<pre><code>def custom_key(pair):
pts, team = pair
return (pts, tuple(-ord(c) for c in team))
pts, teams = zip(*sorted(zip(pts, teams), key=custom_key, reverse=True))
</code></pre>
<p><strong>重新审视编辑:</strong></p>
<p>如果我们要定义一个自定义<code>key</code>,那么我们还可以反转<code>key</code>本身并删除<code>reverse</code>参数:</p>
<pre><code>def custom_key(pair):
pts, team = pair
return (-int(pts), team)
pts, teams = zip(*sorted(zip(pts, teams), key=custom_key))
</code></pre>