我正在写一个足球联赛计划,我想在打印之前对桌子进行排序。每个团队都是具有某些属性的类的成员,到目前为止,我已经能够正确地对整数属性进行排序。
for team in sorted(teams, key=attrgetter("points", "goalDiff", "scored", "name"), reverse = True):
我希望除了name
之外的所有属性都可以反转,是否有可能在这行代码中“取消反转”name
属性,或者我必须采用不同的方法接近?
答案 0 :(得分:6)
如果所有属性(名称除外)都是数字,则取消这些数字以获得相反的排序:
sorted(teams, key=lambda t: (-t.points, -t.goalDiff, -t.scored, t.name))
否定数字为您提供了一种方法来反转其排序顺序,而无需实际反转排序。
如果情况并非如此,那么您必须排序两次,首先是name
属性(按正向顺序),然后是其他属性的相反顺序。对于points
,goalDiff
和scored
相等的任何对象,保留原始排序顺序(按名称),因为Python使用的排序算法是稳定的:
sorted(
sorted(teams, key=attrgetter('name')),
key=attrgetter("points", "goalDiff", "scored"),
reverse=True)