目次
はじめに
ChainMap について
ChainMap のキー値へのアクセス
ChainMap への新しいマッピングの追加
本文小结
ホームページ バックエンド開発 Python チュートリアル Python プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。

Python プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。

Apr 11, 2023 pm 03:04 PM
python 容器 マッピング

はじめに

コレクションは、Python の一般的な組み込みコンテナ (dict、list、set、tuple など) を置き換えることができる特殊なコンテナ データ型 (コンテナ データ型) です。コンテナは、さまざまなオブジェクトを格納するために使用できる特別な目的のオブジェクトです。これは、含まれているオブジェクトにアクセスし、それらを反復処理する方法を提供します。

Python は、コンテナ データ型を実装するコレクション モジュールを提供します。この一連の章では、次のような Collections モジュールのさまざまなタイプのコレクション ハーモニーについて学習します。

  • ChainMap
  • Counter
  • Deque
  • DefaultDict
  • NamedTuple
  • OrderedDict
  • UserDict
  • UserList
  • UserString

次のこれらのコンテナー タイプ - ChainMap。

ChainMap について

Python が提供する ChainMap クラス (チェーン マッピング クラスと呼ばれる) は、多くのマッピングを 1 つのマッピングとして迅速にリンクするために使用される辞書のようなクラスです。ユニット。通常、新しい辞書を作成して複数の update() 呼び出しを実行するよりもはるかに高速です。

構文形式は次のとおりです:

xchainMap = collections.ChainMap(*maps)

説明: 構文形式のコレクションはインポート完了です。モジュール名。次のようにモジュールをインポートする場合: import collections as cts、構文は class cts.ChainMap(*maps) に変更できます。または、ファジー インポート: from collections import ChainMap に変更できます。これは ChainMap(*maps) に変更できます。

ChainMap は、複数のディクショナリまたは他のマッピングを組み合わせて、単一の更新可能なビュー (ディクショナリのリスト) を作成できます。マッピングが指定されていない場合は、新しいチェーン マップ (ChainMap) が常に少なくとも 1 つのマッピングを使用できるように、空のディクショナリが提供されます。

チェーン マッピングの基礎となるマッピングはリストに保存されます。リストは公開されており、maps プロパティを使用してアクセスまたは更新できます。マップ属性を除けば、チェーン マッピングには他の新しい拡張状態はありません。

ChainMap は、参照によって基礎となるマッピングをマージします。したがって、基になるマップの 1 つが更新されると、それらの変更は ChainMap にも反映されます。

チェーン マッピングは、すべての一般的な辞書 (dict) メソッドをサポートします。さらに、新しいサブコンテキストを作成するメソッドにはマップ属性があり、この属性マップを使用して、最初のマップ (マップはリスト) を除くすべてのマップにアクセスできます。

は、最初の検索から最後の検索までの順序で並べられた、ユーザーが更新可能なマッピング リストに対応します。これは、検索するマッピングを変更するために変更できる唯一の保存された状態です。このようなリストには、常に少なくとも 1 つのマッピングが含まれている必要があります。

次の簡単な例を見てみましょう。コード リストは次のとおりです:

Python プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。

プログラムを実行した出力結果は次のとおりです:

ChainMap({'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'})
[{'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'}]
ログイン後にコピー

上記のリストでは、2 つの辞書を含む ChainMap オブジェクト (chain_map) を定義します。次に、ChainMap オブジェクトとマップ プロパティを出力します。出力からわかるように、結果はこれらの辞書の構成を示すビューになります。

ChainMap のキー値へのアクセス

keys() メソッドと value() メソッドを使用して、ChainMap のキーと値にアクセスできます。コード例は次のとおりです。

Python プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。

上記コードの出力結果は次のとおりです。

KeysView(ChainMap({'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'}))
ValuesView(ChainMap({'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'}))
ログイン後にコピー

プログラムの出力結果に示すように、chain_map の結果.keys() は KeysView (キー ビュー) であり、chain_map.values() の結果は ValuesView (値ビュー) です。これら 2 つのビュー タイプの組み込みクラスは、対応するキー名と値オブジェクトをそれぞれ走査できる反復可能なオブジェクトです。例:

Python プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。

出力結果は次のとおりです:

key = a,value=A
key = b,value=B
key = one,value=1
key = two,value=2
链映射包含的值为:
A;B;1;2;
ログイン後にコピー

コードと出力結果を組み合わせると、わかりやすくなります。つまり、チェーン マッピングは次のようになります。複数のマッピングを結合します (マップには多くの実装 (辞書もその 1 つ) がマップ、つまりチェーン マップにパッケージ化されており、辞書のようにアクセスできます。たとえば、辞書のように特定のキーの値にアクセスできます:

print(chain_map['b'] )
ログイン後にコピー

つまり、キー名:chain_map[' one '] を使用して、基になる辞書内の単一項目の値にアクセスします。チェーンマップ。

ChainMap への新しいマッピングの追加

ChainMap には、任意の数の辞書を含めることができます。組み込みの new_child() メソッドを使用して、新しい辞書を ChainMap に追加します。 new_child() メソッドは、新しいマッピングを含む新しい ChainMap を返し、その後に現在のインスタンス内のすべてのマッピングが続きます。ここで注意すべき点は、新しく追加された辞書が ChainMap の先頭に配置されることです。例を見てみましょう:

Python プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。

# プログラムを実行すると、入力結果は次のようになります:

Old: ChainMap({'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'})
New: ChainMap({'x': 0, 'y': 1}, {'one': 1, 'two': 2}, {'a': 'A', 'b': 'B'})
ログイン後にコピー

这里需要注意的是,用链式映射的new_child()方法添加新字典后,不改变原来的链映射,会返回一个新的ChainMap对象。另外,如果你修改链式映射所包含的映射或字典,变化也将体现在链式映射对象中。

另外,实践中要当心:如果你按照字典操作来添加新的键值对,则该键值对会添加到链式映射所包含的第一个映射中,如:new_chain_map['X'] = 'Unkown' 。自己动手试试看。

所含映射有相同键怎么办?

底层上,链式映射主要是为把多个字典或映射打包成一个映射,以便集中操作。如果所办函的字典中有相同的键会怎样呢?来看示例:

Python プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。

运行程序输出结果如下:

ChainMap({'id': 21001, 'country': '大秦', 'emperor': '嬴政'}, {'name': '李靖', 'country': '大唐', 'title': '元帅'})
大秦
('name', '李靖')
('country', '大秦')
('title', '元帅')
('id', 21001)
('emperor', '嬴政')
ログイン後にコピー

很显然,链接的映射中出现相同字典项时,只读取第一个,以第一个为准,而且当你更新一个键的值时,它也只是更新第一个映射内容的键值。

如果你想一次更新所有映射中的相同键的值怎么办呢?你可以自定义一个ChainMap子类来实现,或定义更新方法。因为ChainMap中有个属性maps持有完整的各个映射,可以基于此属性来完成相同键的一次性更新。这里简单给个通过方法的方式实现多映射相同键的一次更新。示例代码如下:

Python プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。

当然,你可以写得更复杂一点,以完成更多的需要,也可实现一次多个映射中的相同键的值。自己动手试试吧。

本文小结

本文主要介绍了Python集合模块中的链式映射容器——ChainMap的使用,可以把多个字典打包成一个对象来操作。同时需要注意的是,该映射只是对原字典的引用,当你修改原字典时,相应的变化也为体现在链式映射中。同时,在为ChainMap新增新的键值对时,它会添加到所包含的第一个映射对象中。

以上がPython プログラミング: 辞書チェーン マッピング (ChainMap) を使用する別の方法、試してみましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

独特の目標は関連していますか? 独特の目標は関連していますか? Apr 03, 2025 pm 10:30 PM

明確で明確なものは区別に関連していますが、それらは異なる方法で使用されます。明確な(形容詞)は、物事自体の独自性を説明し、物事の違いを強調するために使用されます。明確な(動詞)は、区別の動作または能力を表し、差別プロセスを説明するために使用されます。プログラミングでは、個別は、重複排除操作などのコレクション内の要素の独自性を表すためによく使用されます。明確なは、奇数や偶数の偶数を区別するなど、アルゴリズムまたは関数の設計に反映されます。最適化する場合、異なる操作は適切なアルゴリズムとデータ構造を選択する必要がありますが、異なる操作は、論理効率の区別を最適化し、明確で読み取り可能なコードの書き込みに注意を払う必要があります。

Cで理解する方法!x? Cで理解する方法!x? Apr 03, 2025 pm 02:33 PM

!X理解!Xは、C言語の論理的な非操作者です。 Xの値をブーリングします。つまり、虚偽の真の変化、trueへの誤った変更です。ただし、Cの真実と虚偽はブール型ではなく数値で表されていることに注意してください。非ゼロは真であると見なされ、0のみが偽と見なされます。したがって、!xは正の数と同じ負の数を扱い、真実と見なされます。

c言語でsumとはどういう意味ですか? c言語でsumとはどういう意味ですか? Apr 03, 2025 pm 02:36 PM

Cには組み込みの合計関数はありませんが、次のように実装できます。ループを使用して要素を1つずつ蓄積します。ポインターを使用して、要素に1つずつアクセスして蓄積します。大量のデータ量については、並列計算を検討してください。

H5ページの生産には継続的なメンテナンスが必要ですか? H5ページの生産には継続的なメンテナンスが必要ですか? Apr 05, 2025 pm 11:27 PM

H5ページは、コードの脆弱性、ブラウザー互換性、パフォーマンスの最適化、セキュリティの更新、ユーザーエクスペリエンスの改善などの要因のため、継続的に維持する必要があります。効果的なメンテナンス方法には、完全なテストシステムの確立、バージョン制御ツールの使用、定期的にページのパフォーマンスの監視、ユーザーフィードバックの収集、メンテナンス計画の策定が含まれます。

58.com作業ページでリアルタイムアプリケーションと視聴者のデータを取得する方法は? 58.com作業ページでリアルタイムアプリケーションと視聴者のデータを取得する方法は? Apr 05, 2025 am 08:06 AM

クロール中に58.com作業ページの動的データを取得するにはどうすればよいですか? Crawlerツールを使用して58.comの作業ページをrawったら、これに遭遇する可能性があります...

ラブコードのコピーをコピーして貼り付けて無料でラブコードを貼り付けます ラブコードのコピーをコピーして貼り付けて無料でラブコードを貼り付けます Apr 04, 2025 am 06:48 AM

コードのコピーと貼り付けは不可能ではありませんが、注意して扱う必要があります。コード内の環境、ライブラリ、バージョンなどの依存関係は、現在のプロジェクトと一致しないため、エラーや予測不可能な結果が得られます。ファイルパス、従属ライブラリ、Pythonバージョンなど、コンテキストが一貫していることを確認してください。さらに、特定のライブラリのコードをコピーして貼り付けるときは、ライブラリとその依存関係をインストールする必要がある場合があります。一般的なエラーには、パスエラー、バージョンの競合、一貫性のないコードスタイルが含まれます。パフォーマンスの最適化は、コードの元の目的と制約に従って再設計またはリファクタリングする必要があります。コピーされたコードを理解してデバッグすることが重要であり、盲目的にコピーして貼り付けないでください。

See all articles