例如,
a = [(4, 3), (6, 3), (2, 1), (3, 1)]
如何在不使用itemgetter
的情况下对这个元组进行两次排序?我想按第一key = a[1]
和第二key = a[0]
排序。喜欢这个
a = [(6, 3), (4, 3), (3, 1), (2, 1)]
只需颠倒排序:
sorted(a, reverse=True)
对于新列表或
a.sorted(reverse=True)
以就地对列表进行排序。
元组按字典顺序进行比较,因此首先由第一个元素进行比较,然后在平局的情况下由第二个元素进行比较。首先按第二个元素排序,然后按第一个元素排序,其顺序与首先按第二个元素排序并按第一个元素对结果列表进行排序的顺序完全相同:
>>> from operator import itemgetter
>>> a = [(4, 3), (6, 3), (2, 1), (3, 1)]
>>> sorted(a, key=itemgetter(1), reverse=True)
[(4, 3), (6, 3), (2, 1), (3, 1)]
>>> sorted(sorted(a, key=itemgetter(1), reverse=True), key=itemgetter(0), reverse=True)
[(6, 3), (4, 3), (3, 1), (2, 1)]
>>> sorted(a, reverse=True)
[(6, 3), (4, 3), (3, 1), (2, 1)]
如果输入的元组包含两个以上的元素,其中必须忽略这些额外的元素,则仍然可以使用 itemgetter()
,因为它支持多个索引(此时它会返回这些索引处值的元组(:
>>> itemgetter(0, 1)(a[0])
(4, 3)
>>> sorted(a, key=itemgetter(0, 1), reverse=True)
[(6, 3), (4, 3), (3, 1), (2, 1)]