🔖

【Python】defaultdict の使い方と dict.get() との違い

に公開

はじめに

Pythonの辞書(dict)で、存在しないキーにアクセスしてエラーになった経験はありませんか?

そのようなときに便利なのが collections.defaultdict です。

本記事では、defaultdict の基本的な使い方と、dict.get() との違いを解説します。

1. defaultdict の基本

from collections import defaultdict

d = defaultdict(int)
d['apple'] += 1
print(d)  # {'apple': 1}

※ 通常の dict では、存在しないキーに += を使うとエラーになります

  • 存在しないキーにアクセスすると、自動的に初期値(ここでは int() → 0)が設定される
  • +=.append() などの操作を事前チェックなしで使える

よく使う初期値の例

from collections import defaultdict

int_dict = defaultdict(int)       # 0
list_dict = defaultdict(list)     # []
set_dict = defaultdict(set)       # set()

2. dict.get() との違い

通常の辞書でキーが存在するか確認するには、get() を使います。

d = {'apple': 1}
value = d.get('banana', 0)  # キーがないときは0を返す

しかし get() は値を一時的に返すだけで、辞書には追加されません

比較表:

機能 dict.get()の場合 defaultdictの場合
存在しないキーにアクセス デフォルト値を返すが追加しない 初期値で自動的にキーを追加
値の更新(+=, .append() 事前に get() が必要 そのまま書いてOK
実際に辞書にキーが入るか ❌ 入らない ✅ 自動で入る

3. 活用例

ここでは、defaultdict が役立つ使用例を2つご紹介します。

カウント処理

from collections import defaultdict

words = ['apple', 'banana', 'apple']
counter = defaultdict(int)

for word in words:
    counter[word] += 1

print(counter)  # {'apple': 2, 'banana': 1}

リストのグループ化

from collections import defaultdict

data = [('fruit', 'apple'), ('fruit', 'banana'), ('veg', 'carrot')]
grouped = defaultdict(list)

for category, item in data:
    grouped[category].append(item)

print(grouped)  # {'fruit': ['apple', 'banana'], 'veg': ['carrot']}

おわりに

  • 存在しないキーにデフォルト値を自動設定したいなら defaultdict
  • 一時的な参照だけでよいなら dict.get()

使い分けを意識することで、コードがよりシンプルでエラーに強くなります。

本記事が参考になれば幸いです。


🔗 関連記事

Discussion