2016-12-22 12 views
0

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

lists=[["John",8,7,9],["Sarah",5,3,8],["David",4,3,9],["Alice",5,4,7]] 

, который я хочу, чтобы отсортировать их наименьший элемент, но если этот элемент является такой же, я хочу, чтобы выполнить вторичную сортировку по второй мельчайший элемент. До сих пор я сортируется по первому критерию:

lists.sort(key=lambda x: min(x)) 

, который, когда я звоню lists возвращается

[["Sarah",5,3,8],["David",4,3,9],["Alice",5,4,7],["John",8,7,9]] 

и теперь я хочу поставить ["David",4,3,9] впереди ["Sarah",5,3,8], но я не знаю, как обратитесь ко второму наименьшему элементу. Заранее спасибо!

ответ

1

Использование sorted вместо min в выражении лямбда как:

>>> lists=[["John",8,7,9],["Sarah",5,3,8],["David",4,3,9],["Alice",5,4,7]] 

#  sort based on numeric values v 
>>> lists.sort(key=lambda x: sorted(x[1:])) 
>>> lists 
[['David', 4, 3, 9], ['Sarah', 5, 3, 8], ['Alice', 5, 4, 7], ['John', 8, 7, 9]] 

Это будет сортировать список на основе порядка значений в порядке возрастания.

+1

В Python 3 это вызывает ошибку неупорядоченных типов. Вам может потребоваться вернуть лямбда: 'lists.sort (key = lambda x: sorted (x [1:]))' – ayhan

+1

@ayhan: Спасибо, что привлекли его к сведению. Я проверил его на Python2. Сегодня нужно знать что-то новое –