Список заказов нескольких элементов в Python по значению

Я создал список с несколькими элементами.

Например:

highScoreList = [["Dummy1",40,50],["Dummy2",100,80],["Dummy3",100,90]] 

Я пытаюсь сортировать это на основе значений. Прежде всего, он должен сортироваться по самому большому 2-му значению (здесь: 100 больше 40).

Если есть некоторые элементы, которые имеют один и тот же 2-й элемент (здесь: 100 и 100), я по-прежнему хочу сортировать их с помощью 3-го элемента. Чем меньше 3-й элемент, тем выше он должен ранга (здесь: 80 меньше 90).

Результат должен быть:

 Dummy2 100 Dummy3 100 Dummy1 40 

В прошлом я написал какой-то аналогичный код для набора, используя только 1 балл.

 def printHighScoreList(): descender = ((key,highScoreList[key]) for key in sorted(highScoreList,key=highScoreList.get, reverse=True)) for key, value in descender: print(key, value) 

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

 highScoreList.sort(key=lambda x: (-x[1], x[2])) 

highScoreList теперь отсортировано правильно:

 [['Dummy2', 100, 80], ['Dummy3', 100, 90], ['Dummy1', 40, 50]] 

В то время как метод двойной сортировки из ответа @ BHATIRSHAD принимает 3.39us (в вашем списке на моей машине для петель 10k), метод выше занимает всего 1,5us.

Сортируйте список в порядке возрастания по третьему элементу, а затем сортируйте результирующий список в порядке добавления на основе второго элемента списка. Демо-версия:

 >>> highScoreList = [["Dummy1",40,50],["Dummy2",100,80],["Dummy3",100,90]] >>> sorted(sorted(highScoreList, key=lambda x:x[2]),key=lambda x:x[1],reverse=True) [['Dummy2', 100, 80], ['Dummy3', 100, 90], ['Dummy1', 40, 50]]