Python クックブック (データ構造とアルゴリズム) は複数のマッピングを 1 つのマッピングにマージします

不言
リリース: 2018-04-19 13:45:38
オリジナル
1513 人が閲覧しました

この記事では、複数のマッピングを 1 つのマッピングにマージする Python クックブックの方法 (データ構造とアルゴリズム) を主に紹介し、Python 辞書マッピングのマージ操作に関連する実装スキルをサンプルの形で分析します。この記事の例

複数のマッピングを 1 つのマッピングにマージする Python の方法について説明します。以下のように、参考のために全員と共有してください:

質問: 複数の辞書またはマップを論理的に単一のマッピング構造に結合して、値の検索やキーが存在するかどうかの確認などの特定の操作を実行します

解決策: collections モジュールの ChainMap クラスを使用します。 collections模块中的ChainMap

ChainMap可接受多个映射然后在逻辑上使它们表现为一个单独的映射结构。这些映射在字面上并不会合并在一起。相反,ChainMap

ChainMap は複数のマッピングを受け入れ、それらを別のマッピング構造として論理的に動作させることができます。これらのマッピングは文字通りマージされるわけではありません。対照的に、ChainMap は、基礎となるマッピング関係を記録するリストを単純に保持し、このリストをスキャンするための一般的な辞書操作を再定義します。

# example.py
#
# Example of combining dicts into a chainmap
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
# (a) Simple example of combining
from collections import ChainMap
c = ChainMap(a,b) #如果有重复的键,那么会采用第一个映射中所对应的值。
print(c['x'])   # Outputs 1 (from a)
print(c['y'])   # Outputs 2 (from b)
print(c['z'])   # Outputs 3 (from a)
# Output some common values
print('len(c):', len(c))
print('c.keys():', list(c.keys()))
print('c.values():', list(c.values()))
# Modify some values
c['z'] = 10
c['w'] = 40
print("a:", a)
del c['x']
print("a:", a)
# Example of stacking mappings (like scopes)
values = ChainMap()
values['x'] = 1
# Add a new mapping
values = values.new_child()
values['x'] = 2
# Add a new mapping
values = values.new_child()
values['x'] = 3
print(values)
print(values['x'])
# Discard last mapping
values = values.parents
print(values)
print(values['x'])
# Discard last mapping
values = values.parents
print(values)
print(values['x'])
ログイン後にコピー

>>> ================================ RESTART ================================
>>>
1
2
3
len(c): 3
c.keys(): ['y', 'x', 'z']
c.values(): [2, 1, 3]
a: {'x': 1, 'z': 10, 'w': 40}
a: {'z': 10, 'w': 40}
ChainMap({'x': 3}, {'x': 2}, {'x': 1})
3
ChainMap({'x': 2}, {'x': 1})
2
ChainMap({'x': 1})
1
>>>
ログイン後にコピー

さらに、ChainMap は元の辞書で動作するため、マージされた辞書に反映できない元の辞書への変更など、不快な動作を回避できます。

>>> a={'x':1,'z':3}
>>> b={'y':2,'z':4}
>>> merged=ChainMap(a,b)
>>> merged
ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
>>> merged['x']
1
>>> a['x']=55
>>> merged['x']
55
>>> merged
ChainMap({'x': 55, 'z': 3}, {'y': 2, 'z': 4})
>>>
ログイン後にコピー

(コードは「Python クックブック」から引用)

関連する推奨事項:

Python クックブック (文字列とテキスト) 任意の数の区切り文字で文字列を分割する

以上がPython クックブック (データ構造とアルゴリズム) は複数のマッピングを 1 つのマッピングにマージしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!