🔖
【Python】defaultdict の使い方と dict.get() との違い
はじめに
Pythonの辞書(dict
)で、存在しないキーにアクセスしてエラーになった経験はありませんか?
そのようなときに便利なのが collections.defaultdict
です。
本記事では、defaultdict
の基本的な使い方と、dict.get()
との違いを解説します。
defaultdict
の基本
1. 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()
dict.get()
との違い
2. 通常の辞書でキーが存在するか確認するには、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