Pythonに限らず、プログラムを書いているとリスト(配列)や辞書をソートする機会はよくあります。そして、それらの方法はブログ記事などでたくさん紹介されています。
ただ、リストや辞書ほど頻度は多くありませんが、インスタンスのリストをインスタンス変数でソートしたいという事があります。例えば、次のようなStudent
というクラスがあった場合に、students
というインスタンスのリストをscore
でソートするというような場面です。
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
a = Student('Taro', 70)
b = Student('Hanako', 90)
c = Student('Jiro', 80)
students = [a, b, c]
このような場合、operator.attrgetter関数を使えば次のように数行(ほぼ一行)で書けます。
from operator import attrgetter
students.sort(key=attrgetter('score'))
for s in students:
print(s.name, s.score)
Taro 70
Jiro 80
Hanako 90
降順にソートしたい場合は、次のようにsort
メソッドの引数reverse
をTrue
にするだけです。
from operator import attrgetter
students.sort(key=attrgetter('score'), reverse=True)
for s in students:
print(s.name, s.score)
Hanako 90
Jiro 80
Taro 70