辞書(dict)

【Python】辞書(dict)に要素を追加・更新する方法

【Python】辞書(dict)に要素を追加・更新する方法

Pythonの辞書(dict)に要素を追加・更新する方法について解説します。

辞書に要素を追加・更新する方法

Pythonの辞書(dict)はプログラミングでも非常に重要な型であり、辞書にデータを追加したり、更新したりするコードはよく書きます。

本記事では、辞書に要素を追加・更新する方法について、基本的な方法について説明します。

辞書にキーと値を追加・更新する方法

Pythonで辞書を定義した後に、要素を追加・更新したい場合はブラケット[]を使って以下例のようにします。

# 辞書を定義する
d = {"k1": 1, "k2": 2}
print(f"d: {d}")

# 辞書データを参照する
print(f"d['k1']: {d['k1']}")
print(f"d['k2']: {d['k2']}")

# 辞書に要素を追加する
print("\n=== 要素を追加")
d["k3"] = 3
print(f"d: {d}")

# 辞書の要素を更新する
print("\n=== 要素を更新")
d["k1"] = 5
print(f"d: {d}")
【実行結果】
d: {'k1': 1, 'k2': 2}
d['k1']: 1
d['k2']: 2

=== 要素を追加
d: {'k1': 1, 'k2': 2, 'k3': 3}

=== 要素を更新
d: {'k1': 5, 'k2': 2, 'k3': 3}

辞書オブジェクトにキーが存在しない場合には新しく要素が追加され、既に存在する場合には値が更新されます。

辞書dを定義し、新しいキーである”k3″, 値3を設定する場合は、新しく辞書の要素が追加されていることが分かります。一方で、既に存在するキー”k1″に対して、値5を設定した場合には、既にあるキー’k1’の値が1→5に更新されていることが分かります。

辞書にキーが存在しないときのみ要素を追加する方法 ~ setdefaultメソッド ~

辞書にキーが存在しないときのみ要素を追加するには、以下のようにsetdefaultメソッドを使用します。

# 辞書を定義する
d = {"k1": 1, "k2": 2}
print(f"d: {d}\n")

# setdefaultを使って要素を追加
# キーが存在しない場合
print(d.setdefault("k3", 3))
print(f"d: {d}")

# キーが存在する場合
print(d.setdefault("k1", 5))
print(f"d: {d}")
【実行結果】
d: {'k1': 1, 'k2': 2}

3
d: {'k1': 1, 'k2': 2, 'k3': 3}
1
d: {'k1': 1, 'k2': 2, 'k3': 3}

setdefaultメソッドを使用した場合、辞書オブジェクトに指定したキーの要素が存在していないときには新しく要素を追加しますが、既にキーが存在する場合には変更されません。

また、setdefaultメソッドは戻り値として、キーに対応する値を返却します。

上記例では、キー”k3″, 値3を設定したことで、新しく辞書の要素が追加されていることが分かります。ただし、キー”k1″の場合は、既に当該キーが存在しているので、値は1のままで更新されていないことが分かります。

Note

setdefaultメソッドの公式ドキュメントの記載はこちらを参照してください。

辞書を複数のキーと値で更新する方法 ~ updateメソッド ~

上記では1要素ずつ追加・更新する例を見てきましたが、辞書に複数のキーと値をまとめて更新する場合にはupdateメソッドが使用できます。

updateメソッドの引数として渡すことができるのは以下があります。

  1. 辞書
  2. キーワード引数
  3. タプルのリスト

【辞書を引数に指定する場合】

d = {"k1": 1, "k2": 2}
print(f"d: {d}")

# 辞書を引数に指定する場合
d_add = {"k2": 10, "k3": 20, "k4": 30}
d.update(d_add)
print(f"d: {d}")

【キーワード引数で指定する場合】

d = {"k1": 1, "k2": 2}
print(f"d: {d}")

# キーワード引数で指定する場合
d.update(k2=10, k3=20, k4=30)
print(f"d: {d}")

【タプルのリストで指定する場合】

d = {"k1": 1, "k2": 2}
print(f"d: {d}")

# タプルのリストを引数に指定する場合
t_add = [("k2", 10), ("k3", 20), ("k4", 30)]
d.update(t_add)
print(f"d: {d}")

上記のプログラムの実行結果はいずれの場合も以下のようになります。

【実行結果】
d: {'k1': 1, 'k2': 2}
d: {'k1': 1, 'k2': 10, 'k3': 20, 'k4': 30}

結果からも分かるように、updateメソッドは存在しないキーの場合は新しい要素を追加し、存在するキーの場合は当該キーの値を更新します。なお、返り値についてはNoneです。

Note

updateメソッドの公式ドキュメントの記載はこちらを参照してください。

|演算子と|=演算子で辞書を結合・更新する方法 ※Python3.9以降

|演算子や|=演算子を使用して複数の辞書を結合・更新することができます。注意点として、|演算子、|=演算子は、Python3.9より使用可能になっているため、それ以前のバージョンのPythonで実行すると「TypeError」となるので注意してください。

【|演算子を使用する場合】

d1 = {"k1": 1, "k2": 2}
print(f"d1: {d1}")
d2 = {"k2": 10, "k3": 20, "k4": 30}
print(f"d2: {d2}")

# |演算子を使用
print(f"d1|d2 : {d1|d2}")
print(f"d2|d1 : {d2|d1}")
【実行結果】
d1: {'k1': 1, 'k2': 2}
d2: {'k2': 10, 'k3': 20, 'k4': 30}
d1|d2 : {'k1': 1, 'k2': 10, 'k3': 20, 'k4': 30}
d2|d1 : {'k2': 2, 'k3': 20, 'k4': 30, 'k1': 1}

【|=演算子を使用する場合】

d1 = {"k1": 1, "k2": 2}
print(f"d1: {d1}")
d2 = {"k2": 10, "k3": 20, "k4": 30}
print(f"d2: {d2}")

# |=演算子を使用
d1 |= d2
print(f"d1: {d1}")
【実行結果】
d1: {'k1': 1, 'k2': 2}
d2: {'k2': 10, 'k3': 20, 'k4': 30}
d1: {'k1': 1, 'k2': 10, 'k3': 20, 'k4': 30}

|演算子や|=演算子は、演算子の左側にある辞書に対して、右側にある辞書を結合する動作をします。

そのため、左側の辞書に存在するキーと同じキーが右側の辞書に含まれている場合には、右側の辞書の値で更新されることに注意しましょう。

また、|演算子は、d1|d2|d3 のように複数の変数を連続して使用することが可能です。

Note

Python3.9の公式ドキュメントのこちらに新しい機能として説明があります。公式ドキュメントに記載があるように詳細はPEP584にて提案がされています。

まとめ

Pythonの辞書(dict)に要素を追加・更新する方法について解説しました。

基本的な辞書への要素追加・更新の方法から、キーが存在しない時のみ追加する方法、複数のキーと値を設定する方法、|演算子と|=演算子の使用方法(Python 3.9以降)といった内容を説明しました。

辞書の操作はプログラミングで非常に重要な要素のため、しっかり使えるようになってもらえるとよいかと思います。