Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonのChainMap(チェーンマップ)とは?基本の使い方をサンプルコード付きで解説

ChainMap(チェーンマップ)は、複数の辞書(dict)を1つの単位としてまとめて扱えるようにするクラスです。同じキーが複数の辞書に存在する場合は、先頭の辞書の値が優先されるため、デフォルト設定と上書き設定を組み合わせた管理などにも活用できます。

ChainMapはPython標準ライブラリのcollectionsモジュールに含まれています。利用する際は、まずcollectionsモジュールをインポートしましょう。

import collections

ここからは、ChainMapクラスでよく使われる機能を順番に見ていきます。

maps属性・keys()・values()メソッドの使い方

maps属性は、ChainMapに格納されたすべての辞書のキーと値のペア一覧を表示します。keys()メソッドはChainMap内のすべてのキーを返し、values()メソッドは各キーに対応する値を返します。

サンプルコード

import collections as col
con_code1 = {'India' : 'IN', 'China' : 'CN'}
con_code2 = {'France' : 'FR', 'United Kingdom' : 'GB'}
chain = col.ChainMap(con_code1, con_code2)
print("Initial Chain: " + str(chain.maps))
print('The keys in the ChainMap: ' + str(list(chain.keys())))
print('The values in the ChainMap: ' + str(list(chain.values())))

実行結果

Initial Chain: [{'India': 'IN', 'China': 'CN'}, {'France': 'FR', 'United Kingdom': 'GB'}]
The keys in the ChainMap: ['China', 'United Kingdom', 'India', 'France']
The values in the ChainMap: ['CN', 'GB', 'IN', 'FR']

new_child()メソッドとreversedによる並び替え

new_child()メソッドを使うと、新しい辞書オブジェクトをChainMapの先頭に追加できます。追加された辞書が最優先で検索されるようになるため、設定の上書きなどに便利です。

また、reversed()関数をmapsに適用すると、ChainMap内の辞書の順序を逆に並び替えることもできます。

サンプルコード

import collections as col
con_code1 = {'India' : 'IN', 'China' : 'CN'}
con_code2 = {'France' : 'FR', 'United Kingdom' : 'GB'}
code = {'Japan' : 'JP'}
chain = col.ChainMap(con_code1, con_code2)
print("Initial Chain: " + str(chain.maps))
chain = chain.new_child(code)    # 新しい子辞書を先頭に挿入
print("Chain after Inserting new Child: " + str(chain.maps))
chain.maps = reversed(chain.maps)
print("Reversed Chain: " + str(chain))

実行結果

Initial Chain: [{'India': 'IN', 'China': 'CN'}, {'France': 'FR', 'United Kingdom': 'GB'}]
Chain after Inserting new Child: [{'Japan': 'JP'}, {'India': 'IN', 'China': 'CN'}, {'France': 'FR', 'United Kingdom': 'GB'}]
Reversed Chain: ChainMap({'France': 'FR', 'United Kingdom': 'GB'}, {'India': 'IN', 'China': 'CN'}, {'Japan': 'JP'})

このようにChainMapを使えば、複数の辞書をあたかも1つの辞書であるかのように操作できます。キーの検索順序やnew_child()による優先度の変更を理解しておくと、実務での設定管理などにも応用しやすくなります。

  1. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが

  2. Pythonで関数デコレータをチェーン(連結)して使う方法

    Pythonにおけるデコレータとは、いわば「ラッパー」のようなものです。関数そのもののコードを変更することなく、装飾対象の関数の実行前後に任意の処理を追加できます。さらに、デコレータは1つの関数に対して複数を重ねて適用する(チェーンする)ことも可能です。この記事では、その基本的な使い方を具体例とともに解説します。デコレータをチェーンするサンプルコード以下の例では、makebold と makeitalic という2つのデコレータを定義し、hello 関数に両方を適用しています。def makebold(fn): def wrapped(): return <b&g