我有一个按学校名称排序的团队的QuerySet。属性之一是一种模型方法,可以跟踪团队的获胜百分比。我想按从高到低的顺序对球队进行排序。如果球队的获胜百分比相同,我希望按学校的字母顺序排列。我如何得到这样的东西:

team  pct
x    0.75
a    0.50
b    0.50
c    0.50
y    0.25


因为获胜百分比是一种模型方法,所以我一直在使用Python对已经按字母顺序排列的QuerySet进行排序,但是当我这样做时,学校的字母顺序会丢失:

team_list = Team.objects.order_by('school')
sorted_team_list = sorted(team_list, key=lambda x: x.win_pct, reverse=True)

最佳答案

分两步进行,这很不错,因为排序很稳定:

from operator import attrgetter

sorted_team_list = sorted(team_list, key=attrgetter('school'))
sorted_team_list = sorted(sorted_team_list, key=attrgetter('win_pct'), reverse=True)

10-08 13:21