ぷろぐら×でざいん

Python defaultdictをどんどん使っていこう!

Python defaultdictをどんどん使っていこう!

Pythonでは Dictをよく利用しますが、その中でも結構頻繁して利用しているのが defaultdictです。
特にシステムでは複数あるものをまとめる場面が多々あるので非常に重宝しています。
例えば、同じ Statusを保持するObjectをListとしてまとめたい場合や、同じ Statusを保持するObjectの数を調べたい時などに便利です。


使い方
import random
from collections import defaultdict

class Item(object):
    def __init__(self, item_id):
        self.id = item_id
        self.status = random.choice([1, 2, 3])


item_list = [Item(x) for x in range(0, 10000)]

status_map = defaultdict(list)
status_count = defaultdict(int)
for item in item_list:
    status_map[item.status].append(item)
    status_count[item.status] += 1


print status_count
print len(status_map[1])

上記のように1~3のstatusがあるItemを作成し、それらを全て1つのListに内包します。
そのListの中身を statusごとに整理するロジックになっています。


実行結果
> print status_count
defaultdict(type 'int', {1: 3330, 2: 3341, 3: 3329})
> print len(status_map[1])
3330

まだまだ探せば、もっと賢いまとめる方法などはあるとは思いますので、参考までにどうぞ。
外部リンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です