Search on the blog

2016年4月24日日曜日

便利なPythonライブラリ(3)collections.defaultdict

 Pythonのdefaultdictの話。

defaultdictは基本的にはdictと同じだが、キーが存在しない場合のデフォルト値を設定することができる。

例えば、出現要素の回数を数えるプログラムを考える。(collections.Counter使えば一発だが、簡単なサンプルということで敢えてdict/defaultdictで書いてみる)

dictを使った場合は、以下のように書ける。
出現回数をインクリメントする前に、xがdictに格納されているかどうかのチェックを行い格納されていない場合は0をセットする必要がある。
import numpy as np

def main():
    xs = np.random.randint(0, 10, 100)
    counter = dict()
    for x in xs:
        if x not in counter:
            counter[x] = 0
        counter[x] += 1
    print (counter)

if __name__ == '__main__':
    main()

defaultdictを使うと以下のように書ける。
デフォルト値を予め設定しておくことで、キーが存在するかどうかのチェックを行う必要がない。デフォルト値の設定は、デフォルト値を生成する関数をコンストラクタに渡すことで実現する。今回の例では、lambda : 0 という関数を渡せばよいが、intという関数が同値なので後者を使っている。
from collections import defaultdict
import numpy as np

def main():
    xs = np.random.randint(0, 10, 100)
    counter = defaultdict(int)
    for x in xs:
        counter[x] += 1
    print (counter)

if __name__ == '__main__':
    main()

0 件のコメント:

コメントを投稿