« * Emacsでカーソール以降の連続した半角スペースを削除するEmacs-Lisp | トップページ | * pythonのoperatorモジュールで,独自定義のデータリストから要素の値を取り出す »

2020年9月17日 (木)

* 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]

|

« * Emacsでカーソール以降の連続した半角スペースを削除するEmacs-Lisp | トップページ | * pythonのoperatorモジュールで,独自定義のデータリストから要素の値を取り出す »