Pythonで辞書にキーが存在しないときのみ要素を追加するsetdefault

Modified: | Tags: Python, 辞書

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}

複数の要素を一括で追加したり、複数の辞書を結合したりする方法については以下の記事を参照。

setdefault()メソッドの使い方

辞書(dictオブジェクト)のsetdefault()メソッドでは、第一引数にキーkey、第二引数に値valueを指定する。

第一引数に指定したキーが存在しない場合、新たな要素が追加される。

d = {'k1': 1, 'k2': 2}

d.setdefault('k3', 3)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

第二引数のデフォルト値はNone。省略すると値がNoneの要素が追加される。

d.setdefault('k4')
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': None}

第一引数に指定したキーがすでに存在している場合は、第二引数にどんな値を指定しても辞書は元のまま変更されない。

d.setdefault('k1', 100)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': None}

setdefault()メソッドの返り値

setdefault()メソッドは、上述のように要素を追加する処理を行うとともに、第一引数に指定したキーに対応する値を返す。

第一引数に指定したキーが存在しない場合は、第二引数に指定した値で要素を追加した上で、その値が返される。

d = {'k1': 1, 'k2': 2}

print(d.setdefault('k3', 3))
# 3

print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

第二引数を省略した場合は、Noneを追加し、Noneが返される。

print(d.setdefault('k4'))
# None

print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': None}

第一引数に指定したキーがすでに存在している場合は、第二引数に関わらずそのキーに対応する値が返される。辞書自体は変更なし。

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}

関連カテゴリー

関連記事