note.nkmk.me

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

Date: 2018-10-14 / tags: Python, 辞書

Pythonの辞書(dictオブジェクト)では辞書オブジェクト[キー] = 新たな値で新たな要素を追加できる。この方法では、キーkeyがすでに存在している場合、値valueが新たな値に更新(上書き)される。

setdefault()メソッドを使うことで、既存のキーに対しては値を変更せず、新規のキーに対してのみ新たな値で要素を追加できる。

すでに存在している要素を変更したくない場合に便利。

ここでは以下の内容について説明する。

  • キーを指定して辞書に要素を追加・更新
  • setdefault()メソッドの使い方
  • 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()メソッドは、上述のように要素を追加する処理を行うとともに、第一引数に指定したキーに対応する値を返す。

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

print(d.setdefault('k5', 5))
# 5

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

第二引数を省略した場合はNoneを追加し、Noneを返す。

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

print(d)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': None, 'k5': 5, 'k6': 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, 'k5': 5, 'k6': None}
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事