あなたが望むものを達成する最も簡単な方法は、python ソートが安定しているという事実を利用することです。これにより、最初にアルファベット順に並べ替え、次にスコアで並べ替えることができます。
In [11]: results = [(10, 'Mary'), (9, 'John'), (10, 'George'), (9, 'Frank'), (9, 'Adam')]
In [12]: results.sort(key=lambda x: x[1])
In [13]: results.sort(key=lambda x: x[0], reverse=True)
In [14]: results
Out[14]: [(10, 'George'), (10, 'Mary'), (9, 'Adam'), (9, 'Frank'), (9, 'John')]
最初の並べ替えは、昇順でアルファベット順に並べ替えます。2 番目の並べ替えでは、スコアが等しい要素の相対的な順序を維持しながら、スコアで降順に並べ替えます。
これを行うと、さらに複雑な並べ替えを行うことができます。最初にセカンダリキーで並べ替え、次に最初のキーで並べ替える必要があることを覚えておいてください。(キーが 3 つある場合は、最初に 3 番目、次に 2 番目、最後にメイン キーで並べ替えます)。
2 回呼び出したくない場合はsort
、より複雑なkey
関数を作成する必要があります。何かのようなもの:
In [50]: def key(elem):
...: return elem[0], [-ord(c) for c in elem[1]]
In [51]: sorted(results, key=key, reverse=True)
Out[51]: [(10, 'George'), (10, 'Mary'), (9, 'Adam'), (9, 'Frank'), (9, 'John')]
特に、辞書順に並べ替えられたもの (文字列、タプル、リストなど) があるたびに、すべての要素の符号を変更して順序を逆にすることができます。