* pythonで,独自に作成したclassのオブジェクトを配列にして,それぞれの要素でソート

:CATEGORIES: python

リスト(list), 辞書(dict), setのソート(sorted) | Python Snippets https://python.civic-apps.com/sort-sorted/

 これも上記のページを参考にしています。pythonでのclassの定義も勉強がまだこれからですが,これは参考になりました。


class Hoge:
def __init__(self, i, name):
self.i = i
self.name = name
def __repr__(self):
return "%d:%s" % (self.i, self.name)


In [21]: class Hoge:
...: def __init__(self, i, name):
...: self.i = i
...: self.name = name
...: def __repr__(self):
...: return "%d:%s" % (self.i, self.name)
...:


In [22]: l2 = [Hoge(2, 'c'), Hoge(3, 'a'), Hoge(1, 'b')]


In [23]: l2

Out[23]: [2:c, 3:a, 1:b]

In [24]: sorted(l2, key=lambda h: h.name) #name属性を返す

Out[24]: [3:a, 1:b, 2:c]

In [25]: sorted(l2, key=lambda h: h.i) #name属性を返す

Out[25]: [1:b, 2:c, 3:a]

 ソートのキーの指定にラムダ式を使っているのが特に参考になりました。

 operatorモジュールのattrgetter関数を使う方法も紹介されています。無名関数ともいわれるラムダ式を使うより,可読性がよい気もします。


In [26]: import operator


In [27]: sorted(l2, key=operator.attrgetter('name'))

Out[27]: [3:a, 1:b, 2:c]