如何对元组进行两次排序

时间:2017-04-07 07:20:16

标签: python sorting tuples

例如,

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)]

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)]