値が数値の場合、次を使用してこれを簡単に行うことができますlambda
。
sorted(student_tuples, key=lambda x: (x[2],x[4],-x[0],x[1]))
#^ This field will be
# in descending order
ラムダ関数内の順序を簡単に否定できない場合は、Pythonの並べ替えの安定性に依存し、数回並べ替える必要があります。
s = sorted(student_tuples, key=itemgetter(1))
s.sort(key=itemgetter(0),reversed=True)
s.sort(key=itemgetter(2,4))
この回答でさらに詳しく説明します。
上記の私の答えが同じことを達成していることの証明(数値入力で):
import random
def rand_tuple():
""" Return a random 5-tuple """
return tuple( random.random() for _ in range(5) )
#100 random 5-tuples
lst = [ rand_tuple() for _ in range(100) ]
#sort the list using method 1
sorted_lst = sorted(lst, key = lambda x: (x[2],x[4],-x[0],x[1]))
#sort the list in place using method 2
lst.sort(key = itemgetter(1)) #<- Rightmost tuple element first!!!
lst.sort(key = itemgetter(0), reversed = True)
lst.sort(key = itemgetter(2,4))
print (lst == sorted_lst) #True -- Results are the same :-)