LoginSignup
10
8

More than 3 years have passed since last update.

【Python】インスタンスをインスタンス変数でソートする方法

Posted at

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メソッドの引数reverseTrueにするだけです。

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
10
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8