* 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]
```
0 件のコメント:
コメントを投稿