サッカーリーグのプログラムを書いています。印刷する前にテーブルを並べ替えます。各チームは特定の属性を持つクラスのメンバーであり、これまでのところ整数属性を正しくソートできました。
for team in sorted(teams, key=attrgetter("points", "goalDiff", "scored", "name"), reverse = True):
私はを除いてすべての属性が欲しい name
元に戻すには、「元に戻す」方法があります。 name
このコード行に属性を含めるか、または別のアプローチをとる必要がありますか?
回答:
回答№1は6すべての属性(名前を除く)が数値の場合は、それらの番号を否定してそれらの逆ソートを行います。
sorted(teams, key=lambda t: (-t.points, -t.goalDiff, -t.scored, t.name))
数字を負にすると、実際にソートを逆にする必要なく、ソート順を逆にすることができます。
そうでない場合は、2回ソートする必要があります。 name
属性を順方向に並べ、次に他の属性を逆にします。任意のオブジェクトに対して points
, goalDiff
そして scored
等しい場合、Pythonが使用するソートアルゴリズムは安定しているため、元のソート順(名前順)が保持されます。
sorted(
sorted(teams, key=attrgetter("name")),
key=attrgetter("points", "goalDiff", "scored"),
reverse=True)