看起来您对所有这些东西有些困惑。
operator是一个内置的模块,提供了一组方便的操作员。用两个词
operator.itemgetter(n)构造一个可调用对象,该对象假定一个可迭代对象(例如,列表,元组,集合)为输入,并从中获取第n个元素。
因此,您不能
key=a[x][1]在那里使用它,因为python不知道它是什么
x。相反,您可以使用一个
lambda函数(
elem只是一个变量名,没有魔术):
a.sort(key=lambda elem: elem[1])
或者只是一个普通的功能:
def get_second_elem(iterable): return iterable[1]a.sort(key=get_second_elem)
因此,这里有个重要的注意事项:python函数是一等公民,因此您可以将它们作为参数传递给其他函数。
其他问题:
- 是的,您可以反向排序,只需添加
reverse=True
:a.sort(key=..., reverse=True)
- 要按多个列进行排序,您可以将
itemgetter
多个index:operator.itemgetter(1,2)
或lambda:一起使用lambda elem: (elem[1], elem[2])
。这样,可迭代地为列表中的每个项目构造可迭代变量,然后按lexicographic(?)顺序将它们相互比较(比较第一个元素,如果相等,则比较第二个元素,依此类推) - 您可以使用
a[2,1]
[索引为0的索引]在[3,2]处获取值。使用运算符…可能,但是不像索引那样干净。
有关详细信息,请参阅文档:
operator.itemgetter
解释- 在Python中按自定义键排序列表



