2014-01-04 2 views
1

Итак, что я пытаюсь сделать, это отсортировать список с содержащим (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) 

Конечно, это не сработало. Есть идеи?

спасибо.

+0

Я получаю именно то, что вы говорите, хотите с 'itemgetter' – jonrsharpe

ответ

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

0

это тоже работает:

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

Обратите внимание, что list.sort сортирует список на месте, поэтому печать (l.sort (ключ = что-то)) не будет печатать Нет.

Смежные вопросы