ホームページ  >  記事  >  バックエンド開発  >  複数のマッピングを 1 つのマッピングにマージする Python メソッドと分析 (コード例)

複数のマッピングを 1 つのマッピングにマージする Python メソッドと分析 (コード例)

不言
不言転載
2018-11-26 16:39:492112ブラウズ

この記事の内容は、Python で複数のマッピングを 1 つのマッピングにマージする方法と分析 (コード例) に関するものです。一定の参考価値があります。必要な友人は参考にしてください。お役に立てれば幸いです。あなたは助けてくれました。

1. 要件

複数の辞書またはマッピングがあり、それらを単一のマッピング構造に論理的にマージして、検索などの特定の操作を実行したいと考えています。値を増やすか、キーが存在するかどうかを確認します。

2. 解決策

2 つの辞書があるとします:

a={'x':1,'z':3}
b={'y':2,'z':4}

次に、検索操作を実行するとします。これらの 2 つの辞書をチェックする必要があります。 (たとえば、最初に a を検索し、見つからない場合は b を検索します)。簡単な方法は、コレクション モジュールで ChainMap クラスを使用してこの問題を解決することです。例:

from collections import ChainMap
a={'x':1,'z':3}
b={'y':2,'z':4}
c=ChainMap(a,b)
print(c['x'])
print(c['y'])
print(c['z'])
print(len(c))
print(list(c.keys()))
print(list(c.values()))
a['z']=5
print(c['z'])

実行結果:

1
2
3
3
['y', 'z', 'x']
[2, 3, 1]
5

3. 分析

ChainMap は複数のマッピングを受け入れ、論理的に単一のマッピング メカニズムとして動作します。ただし、これらのマッピングは実行時にマージされません。代わりに、ChainMap は単に基礎となるマッピング関係を記録するリストを維持し、このリストをスキャンするための一般的な辞書操作を再定義します。ほとんどのリスト操作は正常に機能します。例: len、keys()、values()。

重複キーがある場合は、最初のマッピングの対応する値が使用されます。

マッピングを変更する操作は、常にリストされた最初のマッピング構造に作用します。例:

del c['x'] #可以正常删除a中的'x':1
del c['y'] #会移除,因为第一个映射结构a中没有y键

ChainMap の代わりに、辞書の update() メソッドを使用して複数の辞書をマージすることを検討できます。例:

from collections import ChainMap
a={'x':1,'z':3}
b={'y':2,'z':4}
#为了防止b被直接修改,先cope一份b
c=dict(b)
print(id(c))
print(id(b))
c.update(a)
print(c['x'])
print(c['y'])
print(c['z'])

実行結果:

4550769400
4549694808
1
2
3

これは機能しますが、完全なディクショナリ オブジェクトを個別に構築する必要があります (または、ディクショナリ オブジェクトの 1 つを直接変更すると、元のデータが破壊されます)。さらに、元の辞書が変更された場合、その変更はマージされた辞書には反映されませんが、ChainMap には反映されます。

以上が複数のマッピングを 1 つのマッピングにマージする Python メソッドと分析 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。