注目キーワード

【Python】複数の辞書 (dict) を結合しデータがマージされた新しい辞書を作成する

Pythonでちょっとしたプログラムを書く際、辞書({}やdict()で作成するデータ)はキーと値で便利にデータを保存できるデータ型として様々な場面で利用できます。ここでは複数の辞書を結合する処理について確認していきましょう。

2つの辞書をマージする基本的な手法

2つの辞書をマージするとき、様々な手法で新しい辞書を作ることができます。サンプルで確認してみましょう。1つ目の辞書には奇数のデータ、2つ目の辞書には偶数のデータが格納されているとします(キーは10まで)。

サンプルソース

サンプルの実装です。

dict1は奇数番号の、dict2は偶数番号の都道府県名が収められた辞書です。

1つ目の手法では、新しい辞書D1をdict1から作成し、D1にdict2の要素を追加更新(update)することで、dict1とdict2の情報をマージしています。

2つ目の方法は、Python 3.9以降で利用できる「|」の演算子を利用する手法です。集合型のデータと似た形なので、使いやすいかもしれません。

3つ目の方法は、dict1とdict2をそれぞれ展開し、新しく {} を用いて辞書型データを作っています。こちらの手法は調べた範囲では Python 3.5以降なら利用できるようです。

実行結果

次のように、1〜10の都道府県名が含まれた新しい辞書型データを得ることができました。

3つの方法で作った新しい辞書の出力結果

辞書に同じキーが含まれる場合のマージ

もし辞書に同じキーがある場合にはどうなるのでしょうか。3つの手法で挙動を確認してみます。この処理を行うために、dict2に対して間違ったデータを追加した状態にして処理を行います。

サンプルソース

サンプルの実装です。

サンプルの実装では dict1を元に処理する場合(前半)と、dict2を元に処理する場合(後半)とで結果を確認しています。

実行結果

1→2と2→1の2つの方法でmergeした結果の比較

結果から分かるように、dict1を元にした場合には、後から追加される dict2 の間違ったデータ(1: 間違い)が上書きされてしまいます。逆に dict2 を元にした場合には、dict2の間違ったデータがdict1のデータで上書きされ、正しく北海道が記録されたことが分かりました。

スポンサーリンク

こちらの例のように、辞書型は便利で効率的なデータ型ですが、キーの上書きや存在確認・削除など気をつけることもあります。これらの扱い方に注意して、辞書型データやデータの結合を試してみてください。