Python сортирует список списков / по возрастанию, а затем расширяет

если у меня есть список, содержащий список, который выглядит так …

['a',1] ['a',2] ['a',3] ['b',1] ['b',2] ['b',3] 

как я могу отсортировать их так, чтобы элемент 0 отсортировался по убыванию, а элемент 1 отсортировал по возрастанию, поэтому результат будет выглядеть как …

  • Сортировка по ключу словаря внутри словаря в Python
  • Поиск медианы списка в Python
  • Python: сортировка списка и изменение другого
  • Как я могу сортировать кортежи с помощью обратного, но разрыв связей не обратный? (Python)
  • У python есть отсортированный список?
  • Python - Как отсортировать список списков по четвертому элементу в каждом списке?
  •  ['b',1] ['b',2] ['b',3] ['a',1] ['a',2] ['a',3] 

    Используя itemgetter я могу перейти в обратном направлении на элемент 0, но затем я прибегаю к элементу, чтобы, конечно, он разрушает предыдущий вид. Я не могу сделать комбинированный ключ, так как он должен сначала сортировать нисходящий, а затем восходящий.

    TIA, PK

  • Ошибка SSL при отправке электронной почты с помощью Python (ОС Raspbian)
  • Замена Python 3 для PyFile_AsFile
  • Как отправить файлы cookie в почтовый запрос с помощью библиотеки запросов Python?
  • Как изменить цвет определенных слов в текстовом виджете tkinter?
  • Как изменить размер изображения с помощью PIL и сохранить его соотношение сторон?
  • чтение содержимого tar-файла без его разворачивания, в скрипте python
  • 3 Solutions collect form web for “Python сортирует список списков / по возрастанию, а затем расширяет”

     L = [['a',1], ['a',2], ['a',3], ['b',1], ['b',2], ['b',3]] L.sort(key=lambda k: (k[0], -k[1]), reverse=True) 

    L теперь содержит:

     [['b', 1], ['b', 2], ['b', 3], ['a', 1], ['a', 2], ['a', 3]] 

    Вы можете делать последовательные раунды сортировки, поскольку сортировка python стабильна . Вы должны сначала отсортировать по второстепенному ключу . См. Также официальный КАК .

     from operator import itemgetter l = [['a',2], ['a',1], ['b', 2], ['a',3], ['b',1], ['b',3]] l.sort(key=itemgetter(1)) l.sort(key=itemgetter(0), reverse=True) # [['b', 1], ['b', 2], ['b', 3], ['a', 1], ['a', 2], ['a', 3]] 

    Что-то вроде

     def mycmp(a, b): res = cmp(a[0], b[0]) if res == 0: return cmp(a[1], b[1]) return res newlist = sorted(input_list, cmp=mycmp) 

    Сначала метод сравнения проверяет первый элемент каждого элемента. Если они равны, они будут проверять второй элемент каждого элемента. Возвращаемое значение внутри реализации mycmp () может быть сведено к нулю, чтобы реализовать другое поведение сортировки.

    Python - лучший язык программирования в мире.