2016-10-05 34 views
0

我正在寫一個足球聯盟計劃,我想在打印出來之前對錶格排序。每個團隊都是具有某些屬性的類的成員,到目前爲止,我已經能夠正確地對整數屬性進行排序。以不同順序排列對象屬性

for team in sorted(teams, key=attrgetter("points", "goalDiff", "scored", "name"), reverse = True): 

我想除了name所有屬性被逆轉,是有可能的方式「聯合國反」在這行代碼的name屬性或我必須採取不同的做法?

+0

是其他值的數? –

+0

是的,除「名稱」以外的所有屬性都是整數。 – bullbo

回答

6

如果所有屬性(除了名字)是數字,否定這些數字來獲得這些反向排序:

sorted(teams, key=lambda t: (-t.points, -t.goalDiff, -t.scored, t.name)) 

否定號碼給你一個辦法扭轉它們的排序順序,而不必實際扭轉分類。

如果不是這種情況,那麼您必須排序兩次,首先是name屬性(按照正向順序),然​​後按照其他屬性的相反順序。對於那些pointsgoalDiffscored是相等的任何對象,原來的排序順序(按名稱)被保留,因爲排序算法Python使用穩定:

sorted(
    sorted(teams, key=attrgetter('name')), 
    key=attrgetter("points", "goalDiff", "scored"), 
    reverse=True) 
相關問題