辞書のマージと更新
Python3.9 から辞書のマージ(|)と更新(|=)を行うための演算子が追加されました。
このときの質問は次の通りです。
2つの辞書 x, y があり、これらをマージしたいとき、x.update(y) だと辞書 x を更新することになるが、更新した辞書を返すようにするためにはどうするのか?
code: python
>> x = {'a': 1, 'b': 2}
>> y = {'b': 10, 'c': 11}
>> z = x.update(y)
>> print(z)
None
>> x
{'a': 1, 'b': 10, 'c': 11}
これが Python3.9 では次のようにシンプルに記述することができます。
code: python
>> x = {'a': 1, 'b': 2}
>> y = {'b': 10, 'c': 11}
>> z = x | y
>> z
{'a': 1, 'b': 10, 'c': 11}
これまでは(Python3.5以降)次のように記述していました。PEP448 code: python
>> z = {**x, **y}
>> z
{'a': 1, 'b': 10, 'c': 11}
Python3.4以前では次のように記述する必要がありました。
code: python
>> x = {'a': 1, 'b': 2}
>> y = {'b': 10, 'c': 11}
>> z = x.copy()
>> z.update(y)
>> z
{'a': 1, 'b': 10, 'c': 11}
あるいは判読性が劣りますが次のように記述することもできます。
code: python
>> x = {'a': 1, 'b': 2}
>> y = {'b': 10, 'c': 11}
>> z = dict(list(x.items()) + list(y.items()))
>> z
{'a': 1, 'b': 10, 'c': 11}
辞書の更新(|=)は次のようにマージした結果を代入するものです。
code: python
>> x = {'a': 1, 'b': 2}
>> y = {'b': 10, 'c': 11}
>> x |= y
>> x
{'a': 1, 'b': 10, 'c': 11}