2014-01-02 2 views
0

То, что я пытаюсь сделать, это своего рода список кортежей, что первая ячейка в кортеже может быть много вложенных кортежей, но вторая ячейка всегда ИНТ значение,сортировка кортежей в списке, используя функцию лямбда

Мой код:

t = [('d',2), ('b', 1), (('a', 'c'), 2)] 
sorted(t, key=lambda x: x[1], reverse=True) 

Но это не работает, последний вложенная кортеж остается в конце концов. любые идеи?

+0

Я не могу воспроизвести проблему; Я получаю '[('d', 2), (('a', 'c'), 2), ('b', 1)]'. Или вы ожидали, что '(('a', 'c'), 2)' будет сортироваться первым? –

+2

Какой порядок вы хотите, чтобы эти три предмета попали? –

+0

Я получаю ('d', 2), ('b', 1) ..... – user2918984

ответ

4

Сортированный метод возвращает новый отсортированный список. Он не изменяет существующий список. С другой стороны, метод list.sort() сортирует список на месте.

t = [('d',2), ('b', 1), (('a', 'c'), 2)] 

Чтобы разобраться в этом можно использовать либо

t = sorted(t, key=lambda x: x[1], reverse=True) 

или

t.sort(t, key=lambda x: x[1], reverse=True) 
Смежные вопросы