sec02 - dictの編集
スポンサーリンク

Pythonのdictで要素を追加・更新する方法("dict[key] = value"の挙動)

dictは、dict[key] = valueのように記述することで、valueの上書きやkeyの追加が可能です。これは、dictにkeyが存在するかどうかで挙動が変わります。

  • keyが存在する時... valueを上書き
  • keyが存在しない時... key: valueを追加

次のコードを実行し、それぞれのdict[key] = valueの挙動を確認しましょう。

my_profile = {'name': 'Nico'}

my_profile['name'] = 'Casey'
my_profile['friends'] = ['Emma', 'Jack']

print(my_profile)  # {'name': 'Casey', 'friends': ['Emma', 'Jack']}

上記コードを実行して出力結果を確認すると、変数"my_profile"の['name']は既に存在しているので、valueが"Casey"に上書きされます。['friends']は存在しないので、'friends': ['Emma', 'Jack']が追加されています。

merge(|)演算子

Python 3.9以降で使用可能

* この機能はPython 3.9以降で使用可能。

listやtupleは+演算子で要素を結合しますが、dictは|(バーティカルライン/ Vertical bar)を使って要素を結合することができます。

my_profile = {'name': 'Nico', 'age': 10}
add_profile = {'friends': ['Emma', 'Jack']}

new_profile = my_profile | add_profile

print(new_profile)  # {'name': 'Nico', 'age': 10, 'friends': ['Emma', 'Jack']}
print(my_profile)   # {'name': 'Nico', 'age': 10}
print(add_profile)  # {'friends': ['Emma', 'Jack']}

dict同士を|で結合すると、新しいdictが生成され、変数"new_profile"へ代入されます。変数"my_profile"と"add_profile"の中身は変化しません。

もし、変数"my_profile"と"add_profile"に同じkeyが存在していた場合は、|の右側にあるdictの値が採用されます。次のコードの場合、"add_profile"の['age']の値が採用され、new_profile['age']の値は99になります。

my_profile = {'name': 'Nico', 'age': 10}
add_profile = {'friends': ['Emma', 'Jack'], 'age':99}

new_profile = my_profile | add_profile

print(new_profile)  # {'name': 'Nico', 'age': 99, 'friends': ['Emma', 'Jack']}
print(my_profile)   # {'name': 'Nico', 'age': 10}
print(add_profile)  # {'friends': ['Emma', 'Jack'], 'age': 99}

Python 3.9より前のdict結合方法(update() メソッド)

* Python 3.9より前のバージョンの場合。

dictの要素を結合させたい場合は、update()メソッドを使います。

my_profile = {'name': 'Nico', 'age': 10}
add_profile = {'friends': ['Emma', 'Jack'], 'age':99}

my_profile.update(add_profile)

print(my_profile)   # {'name': 'Nico', 'age': 99, 'friends': ['Emma', 'Jack']}
print(add_profile)  # {'friends': ['Emma', 'Jack'], 'age': 99}

update()メソッドは、このメソッドを使用したdict自身の中身が変化してしまうという点に注意が必要です。update()メソッドを使い、かつ元のデータも残したい場合は、copy()メソッドで他の変数へコピーを代入した後でupdate()メソッドを使います。(copy()メソッドはShallow copy (シャローコピー)になります。)

my_profile = {'name': 'Nico', 'age': 10}
add_profile = {'friends': ['Emma', 'Jack'], 'age':99}

new_profile = my_profile.copy()
new_profile.update(add_profile)

print(new_profile)  # {'name': 'Nico', 'age': 99, 'friends': ['Emma', 'Jack']}
print(my_profile)   # {'name': 'Nico', 'age': 10}
print(add_profile)  # {'friends': ['Emma', 'Jack'], 'age': 99}
スポンサーリンク