按不同顺序排序对象属性

2024-05-23 17:42:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个足球联赛的程序,我想在打印之前对表格进行排序。每个团队都是具有特定属性的类的成员,到目前为止,我已经能够正确地对整数属性进行排序

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

我想反转除name之外的所有属性,是否有可能在这行代码中“取消反转”name属性,或者我必须采用不同的方法


Tags: keynamein程序for属性排序成员
1条回答
网友
1楼 · 发布于 2024-05-23 17:42:14

如果所有属性(名称除外)都是数字,则对这些数字求反,以获得以下属性的反向排序:

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)

相关问题 更多 >