Python Sort Multidimensional List първи елемент Въз основа на втори елемент, който вече е сортиран

Имам многоизмерен списък като този (вторият елемент вече е сортиран)

    [[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 с вашата ключова дума mates @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 Значи трябваше да одобря предложението ви за дубликат, защото този въпрос съдържаше отговор, който имаше коментар, който се свързваше с подходящ въпрос? Добре. - person orlp; 22.10.2019

Ако искате да направите сортиране на място, отколкото

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

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

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

person PraveenB    schedule 22.10.2019
comment
Опа видях дубликата на @roganjosh и определено това е дублиран елемент - person PraveenB; 22.10.2019