operator.itemgetter は、list や dict の要素を取得するための関数を提供します。
具体的な使用例は以下のようになります。
>>> from operator import itemgetter >>> t = ('Python', 1990, 'Guido') >>> itemgetter(0)(t) 'Python' >>> itemgetter(1)(t) 1990 >>> itemgetter(2)(t) 'Guido' >>> d = {'name': 'Python', 'release': 1990, 'designed by': 'Guido'} >>> itemgetter('name')(d) 'Python' >>> itemgetter('release')(d) 1990 >>> itemgetter('designed by')(d) 'Guido'上の例だけ見ても特に使い道がないように思えますが、実際に operator.itemgetter の使い所となるのは、ずばり lambda の代わりです。
例として、sorted() に key を指定する方法を示します。
tuple の2番目の要素でソートをする、という場合、代表的なやり方として、operator.itemgetter を使うやり方と、lambda を使うやり方があります。
>>> from operator import itemgetter >>> t = (('Python', 1990, 'Guido'), ('Ruby', 1995, 'Matz'), ('Perl', 1987, 'Larry')) # sorted の key を itemgetter で指定 >>> sorted(t, key=itemgetter(1)) [('Perl', 1987, 'Larry'), ('Python', 1990, 'Guido'), ('Ruby', 1995, 'Matz')] # sorted の key を lambda で指定 >>> sorted(t, key=lambda x: x[1]) [('Perl', 1987, 'Larry'), ('Python', 1990, 'Guido'), ('Ruby', 1995, 'Matz')]どちらのやり方でも、タイプ量、可読性ともに大差はありませんが、動作速度は operator.itemgetter の方が若干早いので、operator.itemgetter の使用が推奨されます。
なお、operatorライブラリには、itemgetter の兄弟版とでも言うべき、attrgetter も用意されています。
0 件のコメント:
コメントを投稿