Pythonで辞書にキーが存在しないときのみ要素を追加するsetdefault
Pythonの辞書(dict
オブジェクト)では辞書オブジェクト[キー] = 新たな値
で新たな要素を追加できる。この方法では、キーkey
がすでに存在している場合、値value
が新たな値に更新(上書き)される。
setdefault()
メソッドを使うと、既存のキーに対しては値を変更せず、新規のキーに対してのみ新たな値で要素を追加できる。
すでに存在している要素を変更したくない場合に便利。
なお、辞書に特定のキーが存在しているかどうかを判定するにはin
を使う。
キーを指定して辞書に要素を追加・更新
以下の書き方で辞書の要素を追加・更新できる。
辞書オブジェクト[キー] = 値
存在しないキーを指定すると新たな要素が追加、すでに存在するキーを指定すると既存の値が更新(上書き)される。
d = {'k1': 1, 'k2': 2}
d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}
source: dict_add_update.py
複数の要素を一括で追加したり、複数の辞書を結合したりする方法については以下の記事を参照。
- 関連記事: Pythonで辞書に要素を追加・更新
- 関連記事: Pythonで辞書同士を結合(連結・マージ)
setdefault()メソッドの使い方
辞書(dict
オブジェクト)のsetdefault()
メソッドでは、第一引数にキーkey
、第二引数に値value
を指定する。
第一引数に指定したキーが存在しない場合、新たな要素が追加される。
d = {'k1': 1, 'k2': 2}
d.setdefault('k3', 3)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
source: dict_setdefault.py
第二引数のデフォルト値はNone
。省略すると値がNone
の要素が追加される。
d.setdefault('k4')
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': None}
source: dict_setdefault.py
第一引数に指定したキーがすでに存在している場合は、第二引数にどんな値を指定しても辞書は元のまま変更されない。
d.setdefault('k1', 100)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': None}
source: dict_setdefault.py
setdefault()メソッドの返り値
setdefault()
メソッドは、上述のように要素を追加する処理を行うとともに、第一引数に指定したキーに対応する値を返す。
第一引数に指定したキーが存在しない場合は、第二引数に指定した値で要素を追加した上で、その値が返される。
d = {'k1': 1, 'k2': 2}
print(d.setdefault('k3', 3))
# 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
source: dict_setdefault.py
第二引数を省略した場合は、None
を追加し、None
が返される。
print(d.setdefault('k4'))
# None
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': None}
source: dict_setdefault.py
第一引数に指定したキーがすでに存在している場合は、第二引数に関わらずそのキーに対応する値が返される。辞書自体は変更なし。
print(d.setdefault('k1', 100))
# 1
print(d.setdefault('k1', -100))
# 1
print(d.setdefault('k1'))
# 1
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': None}
source: dict_setdefault.py