例如,
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)]
答案 0 :(得分: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)]