отсортируйте мой список python на основе нескольких значений

#python #list #sorting

#питон #Список #сортировка

Вопрос:

Я хочу отсортировать списки следующим образом:

вход:

 mylist = [['12','25'],['4','7'],['12','14']]  

выход:

 [['4','7'],['12','14'],['12','25']]  

текущий код, который я использую, сортирует только первое число списков:

 def defe(e):  return int(e[0]) mylist = [['12','25'],['4','7'],['12','14']] mylist.sort(key=defe) print(mylist)  

выход:

 [['4','7'],['12','25'],['12','14']]  

Комментарии:

1. вы просто хотите mylist.sort() , чтобы последовательности уже были отсортированы лексикографически . Однако ваша сортировка строк, а не ints. Так что вы, вероятно , просто хотите преобразовать все в ints, mylist = [[int(x) for x in sub] for sub in mylist] а затем просто использовать mylist.sort()

2. Обратите внимание, что «переменная» — это неправильная терминология здесь.

3. Встроенный python sort() будет использовать первую запись списка в качестве первичного ключа сортировки, вторую-в качестве вторичного ключа сортировки и так далее. Он уже делает то, что вы хотите-удалите параметр «ключ»: mylist.sort() даст вам то, что вы хотите

4. sorted([['12','25'],['4','7'],['12','14']], key=lambda sl:(list(map(int,sl))))

5. Примечание: вы также можете просто сначала выполнить сортировку по 2-му номеру, а затем отсортировать этот результат по первому номеру (потому что сортировка стабильна).

Ответ №1:

Попробуй:

 sorted(mylist, key=lambda x: (int(x[0]), int(x[1])))  

Выход:

 [['4', '7'], ['12', '14'], ['12', '25']]  

Если подсписки длиннее 2, то

 sorted(mylist, key=lambda x: list(map(int, x)))  

так лучше.