<p>看起来你对那些东西有点困惑。</p>
<p><code>operator</code>是一个内置模块,提供一组方便的运算符。简而言之,<code>operator.itemgetter(n)</code>构造一个可调用的,它假定一个iterable对象(例如list、tuple、set)作为输入,并从中获取第n个元素。</p>
<p>所以,不能在那里使用<code>key=a[x][1]</code>,因为python不知道<code>x</code>是什么。相反,您可以使用<code>lambda</code>函数(<code>elem</code>只是一个变量名,没有魔力):</p>
<pre><code>a.sort(key=lambda elem: elem[1])
</code></pre>
<p>或者只是一个普通函数:</p>
<pre><code>def get_second_elem(iterable):
return iterable[1]
a.sort(key=get_second_elem)
</code></pre>
<p>所以,这里有一个重要的注意事项:在python中,函数是<a href="http://en.wikipedia.org/wiki/First-class_function" rel="noreferrer">first-class citizens</a>,因此可以将它们作为参数传递给其他函数。</p>
<p>其他问题:</p>
<ol>
<li>是的,您可以反向排序,只需添加<code>reverse=True</code>:<code>a.sort(key=..., reverse=True)</code></li>
<li>若要按多个列排序,可以对多个索引使用<code>itemgetter</code>,或对lambda使用<code>lambda elem: (elem[1], elem[2])</code>。这样,就可以为列表中的每一个项动态地构造iterable,而这些项在词典学中是相互比较的顺序(比较的第一个元素,如果比较的是相等的第二个元素,等等)</li>
<li>可以使用<code>a[2,1]</code>(索引是基于零的)在[3,2]处获取值。使用运算符。。。这是可能的,但不像索引那样干净。</li>
</ol>
<p>有关详细信息,请参阅文档:</p>
<ol>
<li><a href="http://docs.python.org/2/library/operator.html#operator.itemgetter" rel="noreferrer">^{<cd13>} explained</a></li>
<li><a href="https://wiki.python.org/moin/HowTo/Sorting/#Key_Functions" rel="noreferrer">Sorting list by custom key in Python</a></li>
</ol>