ある2つの辞書型のデータd1
,d2
を結合したいとき、Python3では以下のように書くことができます。
new_d = dict(d1, **d2)# (1)
この記法は特定のキーを記述せずに結合できるので便利なのですが、十分に注意しないといけない処理仕様があります。
以下の例をご覧ください。
d1 = {"a": 1, "b": 2} d2 = {"b": 12, "c": 13} print(dict(d1, **d2)) print(dict(d2, **d1))
実行結果は、
{'a': 1, 'b': 12, 'c': 13} #print(dict(d1, **d2)) {'b': 2, 'c': 13, 'a': 1} #print(dict(d2, **d1))
となります。
同じkeyがある場合、キーワード引数である第二引数の辞書型のValueが優先されます。
この仕様を忘れてしまうと思わぬバグに繋がることがあるので注意が必要です。
一方で、
- 特定のキーを記述せずに結合
d1
の複数のKeyのValueを一括変更可能
といった特徴から、例えばベースとなる辞書型データconfig
に対して、変更項目のみを複数格納した辞書型のデータupdate_config
を作り、
new_config = dict(config, **update_config)
といった風に辞書データを更新すると、可読性・保守性の観点でスマートなコードになるような気がします。