6

私が持っているとしましょう:

student_tuples = [ ('john', 'A', 15),
                   ('peter', 'B', 12),
                   ('dave', 'C', 12)]

次のように並べ替えるにはどうすればよいですか。

student_tuples = [('john', 'A', 15), ('dave', 'C', 12), ('peter', 'B', 12)]

私が考えることができるのは次のとおりです。

from operator import itemgetter

sorted(student_tuples, key=itemgetter(2,0), reverse=True)

しかし、出力は次のようになります。

student_tuples = [('john', 'A', 15), ('peter', 'B', 12), ('dave', 'C', 12)]

それは私が望むものではありません。itemgetter または他の簡単な方法を使用してどうすればよいですか?

4

4 に答える 4

4

簡単に否定できる数値フィールドがない場合は、Python.sortが安定しているという事実に基づいて、いつでも 2 フェーズ ソートを実行できます。

student_tuples.sort(key=itemgetter(0))
student_tuples.sort(key=itemgetter(2), reverse=True)
于 2013-05-14T07:51:52.130 に答える
2

並べ替えをネストします。最も重要/最優先の並べ替えは、最も外側の並べ替えで行われます。

student_tuples = [ ('john', 'A', 15),
                   ('peter', 'B', 12),
                   ('dave', 'C', 12)]

from operator import itemgetter

sorted_ = sorted(sorted(student_tuples,key = itemgetter(0)), key=itemgetter(2), reverse=True)

与える

>>> sorted_
[('john', 'A', 15), ('dave', 'C', 12), ('peter', 'B', 12)]
于 2013-05-14T10:51:50.607 に答える