排序嵌套元组列表

时间:2014-01-04 17:04:24

标签: python sorting

所以,我想要做的是,用包含(num, tuple)的列表对列表进行排序我想先用元组的第二个值对它进行排序,如果2是相等的,我想按它排序num(of the first tuple)

所以我想说:

l = [(1,(2,3)),(3,(2,1)),(2,(2,1))]
print(l.sort(key=something))
[(2,(2,1)), (3,(2,1)), (1,(2,3))]

我试过了:

l.sort(key=itemgetter(1,0)

当然没用。有什么想法吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

operator.itemgetter效果很好:

>>> from operator import itemgetter
>>> l = [(1,(2,3)),(3,(2,1)),(2,(2,1))]
>>> l.sort(key=itemgetter(1,0))
>>> print(l)
[(2, (2, 1)), (3, (2, 1)), (1, (2, 3))]
>>>

我认为问题是你试图打印list.sort的结果。你不能这样做,因为它是一个就地方法(它总是返回None)。

答案 1 :(得分:0)

>>> l = [(1,(2,3)),(3,(2,1)),(2,(2,1))]
>>> sorted(l, key=lambda t: (t[1][1],t[0]))
[(2, (2, 1)), (3, (2, 1)), (1, (2, 3))]

或者:

>>> from operator import itemgetter
>>> sorted(l, key=itemgetter(1,0))
[(2, (2, 1)), (3, (2, 1)), (1, (2, 3))]

答案 2 :(得分:0)

这也有效:

l.sort(key=lambda x: x[::-1])

请注意,list.sort会对列表进行排序,因此print(l.sort(key = something))将打印无。