ユーニックス総合研究所

  • home
  • archives
  • python-dict-add

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

  • 作成日: 2021-05-17
  • 更新日: 2023-12-26
  • カテゴリ: Python

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の辞書の追加方法を見てみました。
辞書は非常によく使うデータ型ですよね。

🦝 < 辞書を枕にして寝よう