2016-02-29 5 views
0

У меня есть этот список, как это:Сортировка по списку колонки

list1 = [["A",5,2,8,3],["B",9,5,1,5]] 

И я пытаюсь сортировать его по второй колонке. Я ожидаю, что список1 будет тогда

[["B",9,5,1,5],["A",5,2,8,3]] 

Потому что 9 больше 5 вправо? Я пользуюсь

sorted(lis1, key=lambda a : a[1]) 

но себе не нравится; он остается прежним. Почему это не работает?

+0

Он сортирует в порядке возрастания по умолчанию. Добавьте аргумент 'reverse = True' к вашей' sorted' функции для генерации желаемого результата – gtlambert

ответ

1

Вам просто нужно повернуть его вспять:

list1 = [["A",5,2,8,3],["B",9,5,1,5]] 
list1 = sorted(list1, key=lambda a : a[1], reverse=True) 
print(list1) 
# outputs [["B",9,5,1,5],["A",5,2,8,3]] 

9> 5, так что приходит после этого, если не наоборот.

+0

Пробовал это, и он все еще не изменился .. – Alster

+0

Странно ... когда я копирую вышеуказанный код и запускаю его, он работает – rofls

+1

Вы уверены вы делаете: 'list1 = sorted (list1, key = lambda a: a [1], reverse = True)'? 'sorted' не изменяет список, он возвращает измененный список ... – rofls

2

sorted:

Вернуться новый отсортированный список из элементов в Iterable

Это делает не вроде на месте.

0

с помощью operator.itemgetter() функция:

from operator import itemgetter 

list1 = [["A",5,2,8,3],["B",9,5,1,5],["C",1,2,8,3]] 

print(sorted(list1, key=itemgetter(1))) 
print(sorted(list1, key=itemgetter(1), reverse=True)) 

Выход:

[['C', 1, 2, 8, 3], ['A', 5, 2, 8, 3], ['B', 9, 5, 1, 5]] 
[['B', 9, 5, 1, 5], ['A', 5, 2, 8, 3], ['C', 1, 2, 8, 3]] 
Смежные вопросы