検索
ホームページバックエンド開発Python チュートリアルPython プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)

はじめに

この記事では主に、Python コレクション モジュールの辞書クラス (dict) のいくつかの組み込み拡張サブクラスの適用シナリオと使用例を紹介します。これらを「短くて素早い方法」で習得できます。 dict に直接関連するサブクラス - OrderedDict、defaultdict、userDict。

OrderedDict

Python コレクション モジュールの順序付き辞書 (OrderedDict) は通常の辞書とまったく同じですが、並べ替え操作に関連する追加機能がいくつかあります。 OrderedDict は、キーが挿入された順序を記憶します。組み込みの dict クラスが挿入順序を記憶する機能を獲得したため、それらの重要性は低くなりました (この新しい動作は Python 3.7 で保証されたため、OrderedDict の重要性は現在ではそれほど重要ではないようです)。順序付き辞書を作成するための一般的な形式:

import collections
ordDict = collections.OrderedDict([items]):

または

from collections import OrderedDict
ordDict = OrderedDict([items]):

これは、辞書の順序を並べ替えるための特別なメソッドを持つ dict サブクラスのインスタンスである OrderedDict オブジェクトを作成して返します。この記事では、これらの方法を簡単に紹介します。

1) Popitem(last=True):

順序付けされた辞書の Popitem() メソッドは、(キー, 値) ペアを返し、削除します。 last が True の場合、対応するキーと値のペアは LIFO (後入れ先出し) モードで返され、それ以外の場合は FIFO (先入れ先出し) 順序で返されます。

2) move_to_end(key, last=True):

既存のキーを順序付けられた辞書のいずれかの端に移動します。 last が True (デフォルト) の場合、項目は右に移動し、last が False の場合、項目は先頭に移動します。キーが存在しない場合は KeyError が発生します。

コードを参照してください:

Python プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)

同じキーを削除して OrderedDict に再挿入するとします。キーの挿入順序を維持するために、このキーを最後に置きます。例は次のとおりです。

Python プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)

実行結果は次のとおりです。

删除前的OrderedDict:
x X
y Y
z Z
插入后的OrderedDict:
y Y
z Z
x X

UserDict

UserDict クラスはラッパーとして使用されます。 Python の組み込み辞書 (dict) オブジェクトの場合。このクラスの必要性は、辞書から直接サブクラス化できる機能によって部分的に置き換えられましたが、基になる辞書に属性としてアクセスできるため、このクラスはより使いやすくなっています。いくつかの変更または新しい機能を備えた独自の辞書を作成する場合は、UserDict を使用します。その使用形式は次のとおりです:

import collections
userDict = collections.UserDict([initialdata])

または

import collections
userDict = collections.UserDict([initialdata])

このタイプのシミュレートされた辞書には、そのインスタンスのコンテンツが通常の辞書に格納されており、UserDict のデータ属性を通じてアクセスできます。実例。 Initialdata が提供される場合、データ コンテンツはこれで初期化されます。インスタンス自体は、initialdata への別個の (非排他的) 参照を保持しないため、他の目的に使用できることに注意してください。

UserDict インスタンスは、マッピング メソッドと操作のサポートに加えて、次の属性を提供します。

1) data

UserDict クラスのコンテンツを格納するために使用される実際の辞書。例は次のとおりです。

Python プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)

出力は次のとおりです。

{'name': 'Kevin Cui', 'age': 24}

加算演算 (2 つの演算をマージする) をサポートするカスタム辞書オブジェクトを定義するとします。辞書)。カスタム辞書の 2 つのインスタンスを追加すると、両方の辞書のすべての要素を含む新しい辞書が取得されることが期待されます。 Python で通常の辞書に追加しようとすると、TypeError が発生することに注意してください。 UserDict を使用して実装してみましょう:

Python プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)

#実行中の出力は次のとおりです:

{'x': 10, 'y': 20}

もちろん、他の関連するカスタムを実装することもできます。操作はご自身で行ってください。

DefaultDict

Python の Dictionary クラスでよくある問題は、キーが欠落していることです。辞書に存在しないキーにアクセスしようとすると、KeyError 例外が発生します。したがって、辞書内の要素にアクセスする必要があるときは常に、この状況に対処する必要があります。幸いなことに、Python には DefaultDict クラスが用意されています。これは、KeyError を発生させずに、存在しないキーに何らかのデフォルト値を提供するために使用されます。

DefaultDict は、組み込みの dict クラスのサブクラスです。メソッドをオーバーライドし、書き込み可能なインスタンス変数を追加します。残りの機能は dict と同じです。使用形式は次のとおりです。

import colloections
defaultDict = collections.defaultdict(default_factory=None, /[,…])

上記のコードは、組み込みの dict クラスのサブクラスである、新しい辞書のようなオブジェクト DefaultDict を返します。

最初のパラメータは、default_factory 属性の初期値を指定します。デフォルトは None です。キーワード引数を含め、残りのすべての引数は dict コンストラクターに渡されたかのように扱われます。理解する必要があるのは、このパラメーターが提供される場合、呼び出し可能でなければならないということです。

標準の dict 操作のサポートに加えて、DefaultDict オブジェクトは次のメソッド属性もサポートします:

1) __missing__(key):

default_factory 属性が None の場合、キーを次のように使用します。このパラメータにより KeyError 例外が発生します。

default_factory が None でない場合、引数なしで呼び出すと、指定されたキーのデフォルト値が提供され、その値がキーのディクショナリに挿入されて返されます。

2)default_factory

DefaultDict对象支持default_factory实例变量。该属性由__missing__()方法使用。如果存在,则从构造函数的第一个参数开始初始化;如果不存在,则初始化为None。

Python プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)

运行程序输出结果为:

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

在上述代码中,我们使用列表类型作为default_factory,更易于将包含键值序列对的列表组成字典。当第一次遇到每个键时,它还不在映射中,因此使用default_factory函数自动创建一个条目,该函数返回一个空列表。然后list.append()操作将值连接到新列表。当再次遇到键时,查找正常进行(返回该键的列表),然后list.append()操作将另一个值添加到列表中。这种技术比使用dict.setdefault()的等效技术要简单得多。

我们再看一个示例:

Python プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)

输出结果如下:

[('a', 2), ('c', 1), ('g', 2), ('h', 1), ('i', 1), ('j', 1), ('n', 2)]

在上面代码中,我们将default_factory设置为int。这使得defaultdict用于计数(就像其他语言中的bag或multiset)。

当第一次遇到某个字母时,它就在映射中是不存在的,因此default_factory函数调用int()来提供一个默认的0计数。然后递增操作为每个字母建立计数。

提示:这里传递的int()函数默认返回的是整数0。若想返回任意值,可以自定义个一个基于lambda的常量函数。示例代码如下:

Python プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)

一言以蔽之:使用DefaultDict的好处就是可以避免KeyError异常,并进行一些可能的特定处理。

本文小结

本文主要介绍了Python字典(dict)类相关的几个内置子类的应用。这些直接相关的子类分别是OrderedDict、defaultdict、userDict等内置子类。通过示例代码和关联描述,让你更轻松掌握它们的应用和基本规则。

以上がPython プログラミング: 組み込み辞書 (dict) のサブクラスとアプリケーションの詳細な説明 (すべて 1 か所で)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Python vs. C:曲線と使いやすさの学習Python vs. C:曲線と使いやすさの学習Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

Python vs. C:メモリ管理とコントロールPython vs. C:メモリ管理とコントロールApr 19, 2025 am 12:17 AM

PythonとCは、メモリ管理と制御に大きな違いがあります。 1。Pythonは、参照カウントとガベージコレクションに基づいて自動メモリ管理を使用し、プログラマーの作業を簡素化します。 2.Cには、メモリの手動管理が必要であり、より多くの制御を提供しますが、複雑さとエラーのリスクが増加します。どの言語を選択するかは、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

科学コンピューティングのためのPython:詳細な外観科学コンピューティングのためのPython:詳細な外観Apr 19, 2025 am 12:15 AM

科学コンピューティングにおけるPythonのアプリケーションには、データ分析、機械学習、数値シミュレーション、視覚化が含まれます。 1.numpyは、効率的な多次元配列と数学的関数を提供します。 2。ScipyはNumpy機能を拡張し、最適化と線形代数ツールを提供します。 3. Pandasは、データ処理と分析に使用されます。 4.matplotlibは、さまざまなグラフと視覚的な結果を生成するために使用されます。

PythonとC:適切なツールを見つけるPythonとC:適切なツールを見つけるApr 19, 2025 am 12:04 AM

PythonまたはCを選択するかどうかは、プロジェクトの要件に依存するかどうかは次のとおりです。1)Pythonは、簡潔な構文とリッチライブラリのため、迅速な発展、データサイエンス、スクリプトに適しています。 2)Cは、コンピレーションと手動メモリ管理のため、システムプログラミングやゲーム開発など、高性能および基礎となる制御を必要とするシナリオに適しています。

データサイエンスと機械学習のためのPythonデータサイエンスと機械学習のためのPythonApr 19, 2025 am 12:02 AM

Pythonは、データサイエンスと機械学習で広く使用されており、主にそのシンプルさと強力なライブラリエコシステムに依存しています。 1)Pandasはデータ処理と分析に使用され、2)Numpyが効率的な数値計算を提供し、3)SCIKIT-LEARNは機械学習モデルの構築と最適化に使用されます。これらのライブラリは、Pythonをデータサイエンスと機械学習に理想的なツールにします。

Pythonの学習:2時間の毎日の研究で十分ですか?Pythonの学習:2時間の毎日の研究で十分ですか?Apr 18, 2025 am 12:22 AM

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Web開発用のPython:主要なアプリケーションWeb開発用のPython:主要なアプリケーションApr 18, 2025 am 12:20 AM

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

Python vs. C:パフォーマンスと効率の探索Python vs. C:パフォーマンスと効率の探索Apr 18, 2025 am 12:20 AM

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

See all articles

ホット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

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境