PythonのChainMapを使用しリスト内の独立した辞書をマージ(結合)する

PythonのChainMapを使用し、リスト内の独立した辞書をマージ(結合)してみます。

Pythonのcollections組み込みモジュールによって提供されるChainMapは、複数の辞書から、一つの辞書を作成することができます。

■Python

Google Colaboratory(Google Colab),Python3.7.10

■ChainMapを使用しリスト内の独立した辞書をマージする

では、早速ChainMapを使用しリスト内の独立した辞書をマージしてみます。

■コード

from collections import ChainMap

list_test = [{1:'田中',2:'佐藤'},{3:'佐藤',4:'吉田'},{5:'佐々木'}]

new_list = dict(ChainMap(*list_test))

print(new_list)

今回は、list_testというリストを角括弧”[ ]”を使用し定義します。リスト内には、辞書を定義するするために、波括弧”{ }”を使用し、各要素を囲み、コロン”:”でキーと値を格納します。

格納後、new_listという変数を定義し、ChainMap()を用います。括弧内に引数,パラメータとして、list_testを渡します。この時に”*”(アスタリスク)を用います。使用しないと、「dictionary update sequence element #2 has length 1; 2 is required(辞書更新シーケンス要素#2の長さは1です。 2が必要です)」というERRORが発生しますので、任意の数の位置引数を受け付けるようにします。これで、リスト内の独立した辞書を1つにすることができます。

その後に、dict()を用いて、辞書型配列を作成します。作成後、new_list変数に格納。

最後に、print()関数でnew_list変数内の情報を出力します。

■実行・検証

スクリプトを作成後、このスクリプトを実行してみます。

実行してみると、ChainMap()を用いて、今回定義したリスト内の独立した辞書を1つにして、新しく辞書型配列として、print()関数で出力させることができました。

■辞書の順序を変更する

今回、出力された辞書は、順序が変更されています。

■コード

from collections import ChainMap

list_test = [{1:'田中',2:'佐藤'},{3:'佐藤',4:'吉田'},{5:'佐々木'}]

new_list = dict(ChainMap(*list_test[::-1]))

print(new_list)

一貫性を保ちたい場合は、ChainMap()を用いて、括弧内に引数,パラメータとして、list_testを渡す時に、スライス操作で、角括弧”[ ]”とコロン”:”が2つ,「-1」を使用すると、順序を変更すること(リバース・逆順)ができます。

■実行・検証

スクリプトを作成後、このスクリプトを実行してみます。

実行してみると、スライス操作により、辞書の順序が変更されて出力されました。

コメント

タイトルとURLをコピーしました