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