2016-10-05 36 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) 
相关问题