Python で LINQ to Object を実現する python-linq を書いてみた

仕事では C# を使っているせいか、Python でコレクションを操作するコード書いてるとき「LINQ 使えたらな〜」ってたまに思います。そういえば Python にはジェネレータとラムダ式があったな…。LINQ のメソッド構文なら Python で出来るかも。


LINQ to Object を Python で実装してみました。

github.com


select や where には関数を渡せるようにしています。AppEngine の db.Query みたいに、フィルタを文字列で指定させる方法も考えましたが、文字列を解析するのが面倒なので、この方法にしました。

こんな風に使います。

from linq import Enumerable

source = [x for x in range(1, 10)]
result = Enumerable(source).where(lambda x: x % 2 == 0)\
                           .select(lambda x: x * x)\
                           .to_list()

『lambda』がウザイですね!Pythonラムダ式C# みたいに演算子っぽい記述を採用できなかったのかなぁ。


作っておいてなんですが、Python にはリスト内包表記があるので、使い道はなかなか無さそうです。LINQ to XML なんかを実装すれば使い道が出てくるかもしれませんね。時間があるとき少しずついじっていきます。