Первый элемент многомерного списка сортировки Python на основе второго элемента, который уже отсортирован

У меня есть такой многомерный список (второй элемент уже отсортирован)

    [[92, 25], [93, 25], [95, 27], [94, 27], [94, 27], [92, 27], [89, 27], [89, 27], [92, 27], [91, 30], [90, 30], [90, 30], [90, 30], [91, 30]]

Итак, я хочу отсортировать базу первого элемента по второму элементу (по убыванию). Ожидаемый результат:

    [[93, 25], [92, 25], [95, 27], [94, 27], [94, 27], [92, 27], [92, 27], [89, 27], [89, 27], [91, 30], [91, 30], [90, 30], [90, 30], [90, 30]]

person Wailan Tirajoh    schedule 22.10.2019    source источник
comment
Итак, что пошло не так с тем, что вы узнали о сортировке по нескольким элементам в подсписках?   -  person roganjosh    schedule 22.10.2019
comment
Можете ли вы объяснить, почему это ожидаемый результат? А что вы пытались решить эту проблему?   -  person Scott Hunter    schedule 22.10.2019
comment
Также обратите внимание, что вы называете это массивом, но это не в Python, а список. В 99% случаев массив относится к массиву NumPy. Существует также массив Python, но он практически не используется.   -  person roganjosh    schedule 22.10.2019
comment
О, я думаю, что только что решил свою проблему, выполнив поиск в stackoverflow с вашими товарищами по ключевому слову @roganjosh, я нашел itemgetter, и он решил мой собственный вопрос, например, с 3 повторяющимися строками   -  person Wailan Tirajoh    schedule 22.10.2019


Ответы (2)


Позвольте мне прояснить ситуацию: вы хотите, чтобы список сначала сортировался по второму элементу кортежа в возрастающем порядке, а все связи разрывались по первому элементу. в порядке убывания?

Вы можете сделать это с помощью sorted(l, key=lambda x: (x[1], -x[0])), предполагая, что ваши элементы являются числами. Если нет, вам нужно написать более сложную функцию сравнения.

person orlp    schedule 22.10.2019
comment
Круто, так что ваш ответ точно такой же, как мой предложенный дурак, который вы могли бы забить с - person roganjosh; 22.10.2019
comment
@roganjosh Этот обман не требует разного порядка (по возрастанию / убыванию) для разных столбцов данных. - person orlp; 22.10.2019
comment
Ммм, да, это так. Но ладно. - person roganjosh; 22.10.2019
comment
@roganjosh Где это сказано? - person orlp; 22.10.2019
comment
В комментариях под это, которые ведут к другой цели-обману - person roganjosh; 22.10.2019
comment
@roganjosh Итак, я должен был одобрить ваше предложение о дублировании, потому что этот вопрос содержал ответ, в котором был комментарий, связанный с соответствующим вопросом? Ok. - person orlp; 22.10.2019

Если вы хотите сделать сортировку на месте, чем

arr.sort(key=lambda x:(x[1], -x[0])

в противном случае можно использовать отсортированный

sortedArray = sorted(arr, key=lambda x: (x[1], -x[0]))

person PraveenB    schedule 22.10.2019
comment
Упс, увидел дубликат @roganjosh и определенно это дубликат. - person PraveenB; 22.10.2019