Как отсортировать двухэлементный кортеж строк в смешанном порядке с использованием ключевого параметра (не cmp)

В Python у меня есть что-то вроде следующего (хотя и случайным образом):

l = [('a', 'x'),
     ('a', 'y'),
     ('a', 'z'),
     ('b', 'x'),
     ('b', 'y'),
     ('b', 'z'),
    ]

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

l = [('a', 'z'),
     ('a', 'y'),
     ('a', 'x'),
     ('b', 'z'),
     ('b', 'y'),
     ('b', 'x'),
    ]

В Python2.x существует параметр cmp , который можно передать в sorted () для достижения этого результата, но В Python3 этого больше нет. У него есть только ключевой параметр . Есть ли способ достичь желаемого порядка сортировки, используя только параметр key ?

Я знаю, что могу определить целый новый класс для упаковки моих кортежей или использовать что-то вроде functools.cmp_to_key (который также создает класс-оболочку), но все это кажется тяжелым для такой простой операции. Нет ли другого выхода?

edit: Я должен добавить, что все строки не будут односимвольными и что в некоторых случаях список кортежей содержит не строковые данные [т.е. (базовая строка, дата и время)].

6
задан dave mankoff 3 February 2012 в 21:00
поделиться