🐍 Python
dict.setdefault() でキーが無ければ追加する
setdefault()は「キーが存在しなければ指定した値で追加し、存在すれば何もせず既存の値を返す」メソッドです。カウントや分類のように「初回だけ初期化したい」場面で、if文を書かずに済む書き方としてよく使われます。
d.setdefault(key, default)
# keyがあれば:既存の値を変更せず、その値を返す
# keyが無ければ:key: default を追加し、defaultを返す
# カウンタとしての利用
counts = {}
counts.setdefault("x", 0)
counts["x"] += 1
print(counts)
# {'x': 1}
counts.setdefault("x", 0) # 既に'x'があるので何もしない
counts["x"] += 1
print(counts)
# {'x': 2}
# リストを値にしたグループ化パターン(定番)
groups = {}
for word in ["apple", "avocado", "banana", "blueberry", "cherry"]:
groups.setdefault(word[0], []).append(word)
print(groups)
# {'a': ['apple', 'avocado'], 'b': ['banana', 'blueberry'], 'c': ['cherry']}
setdefault()の引数
- 第1引数: key
- 確認・追加したいキー
- 第2引数: default(省略可)
- キーが無いときに設定する値。省略時は
None
💡 AIコードレビュー観点:get()との違いに注意
get()は「値を取得するだけ」で辞書自体は変更しませんが、setdefault()は「無ければ実際に追加する」という副作用を持ちます。AIが生成したコードでd.setdefault(key, [])のような呼び出しを、値を読むだけのつもりで多用していると、意図せず辞書にキーが増え続けることがあります。読み取り専用のつもりならget()、初期化も兼ねたいならsetdefault()、と目的で使い分けましょう。defaultdictを使えばこのパターンをさらに簡潔に書けます。