🐍 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を使えばこのパターンをさらに簡潔に書けます。

← Python dict クイックリファレンス一覧へ戻る / defaultdictで自動初期化する →