
Table of Contents(目次)
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}