Pythonで辞書(dict)にキーと値を追加する方法

251, 2021-05-17

目次

Pythonで辞書に値を追加する方法

Pythonでは辞書(dict)というデータ型を扱うことができます。
辞書を使うとキーに対して値を設定して管理することができます。

この記事では辞書にキーと値(アイテム)を新しく追加する方法を解説します。
結論から言うと↓のようにやります。

d = {'a': 1, 'b': 2}

d['c'] = 3  # 辞書にキーと値(アイテム)を追加

print(d)
# {'a': 1, 'b': 2, 'c': 3}

具体的に↓を見ていきます。

  • 辞書にアイテムを追加する方法

  • 辞書に他の辞書を連結する方法

  • update()で複数のアイテムを追加

  • |演算子で辞書同士を結合

  • |=演算子で辞書に辞書を連結

関連記事
* Pythonのdict(辞書)の使い方

辞書にアイテムを追加する方法

辞書は↓のように作成します。

d = {'a': 1, 'b': 2}

↑の辞書にはaというキーに1という値が、bというキーに2という値が紐づけられています。
この辞書に値を追加する場合を考えます。
辞書に値を追加するには↓のようなフォーマットで辞書を操作します。

辞書[キー] = 値

先ほどのdという辞書に、キーcで値3というアイテムを紐づける場合は↓のようにします。

d['c'] = 3  # キーがc, 値が3

タプルのリストを辞書に追加する

タプルにキーと値を入れているリストがある場合、それをfor文で回せば↓のように辞書に追加することができます。

d = {'a': 1, 'b': 2}
lis = [('c', 3), ('d', 4)]

for k, v in lis:
    d[k] = v

print(d)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

この方法よりは後述の|=演算子を使ったほうが楽に同様のことが行えます。

複数のリストをzipでまとめる

キーの入ったリストと値の入ったリストを用意して、それをzip()してfor文で回せば簡単に辞書にアイテムを追加できます。

d = {'a': 1, 'b': 2}
l1 = ['c', 'd']
l2 = [3, 4]

for k, v in zip(l1, l2):
    d[k] = v

print(d)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

ちなみにzip()の返り値は後述するupdate()にもそのまま渡すことができます。
for文を使うよりはそちらの方法のほうがスマートに行えます。

辞書に他の辞書を連結する方法

すでに存在する辞書に別の辞書を連結したい場合は↓のようなフォーマットで辞書を操作します。

辞書.update(別の辞書)

例えば↓のようにです。

d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}

d1.update(d2)
print(d1)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

↑の場合、d1と言う辞書にd2という辞書を連結しています。
d1update()d1に対して破壊的な変更を行います。
ちなみにキーが被っている場合は↓のようになります。

d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}

d1.update(d2)
print(d1)
# {'a': 1, 'b': 3, 'c': 4}

↑のようにキーが被っている場合はupdate()の引数側のアイテムが優先されます。

zip()の結果をupdate()に渡す

キーの入ったリストと値の入ったリストを用意して、それをzip()すればそのままupdate()に渡すことができます。

d1 = {'a': 1, 'b': 2}
l1 = ['c', 'd']
l2 = [3, 4]

d1.update(zip(l1, l2))
print(d1)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

update()で複数のアイテムを追加

update()メソッドのキーワード引数にキーと値を指定すれば、複数のアイテムを同時に追加することができます。
↓のようにします。

d1 = {'a': 1, 'b': 2}

d1.update(c=3, d=4)
print(d1)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

↑の場合、d1という辞書にupdate()c=3, d=4というアイテムが追加されています。

|演算子で辞書同士を結合

Python3.9から|演算子で辞書同士を結合できるようになりました。

d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}

d3 = d1 | d2

print(d3)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

キーが重複している場合は後続の辞書が優先されます。

d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}

d3 = d1 | d2

print(d3)
# {'a': 1, 'b': 3, 'c': 4}

|=演算子で辞書に辞書を連結

Python3.9から|=演算子で辞書に辞書を結合できるようになりました。

d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}

d1 |= d2

print(d1)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

↑の場合、d1という辞書にd2が結合されます。

また、|=では(キー, 値)のタプルを指定することができます。

d1 = {'a': 1, 'b': 2}
d2 = [('c', 3), ('d', 4)]

d1 |= d2

print(d1)
# {'a': 1, 'b': 2, 'd': 4, 'c': 3}

このフォーマットは|演算子では指定できません。
↓のように例外TypeErrorが送出されます。

d1 = {'a': 1, 'b': 2}
d2 = [('c', 3), ('d', 4)]

try:
    d3 = d1 | d2
except TypeError as e:
    print(e)
    # unsupported operand type(s) for |: 'dict' and 'set'

おわりに

今回はPythonの辞書の追加方法を見てみました。
辞書は非常によく使うデータ型ですよね。

辞書を枕にして寝よう