検索
ホームページバックエンド開発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アレイをどのようにスライスしますか?Pythonアレイをどのようにスライスしますか?May 01, 2025 am 12:18 AM

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

どのような状況で、リストは配列よりもパフォーマンスが向上しますか?どのような状況で、リストは配列よりもパフォーマンスが向上しますか?May 01, 2025 am 12:06 AM

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

PythonアレイをPythonリストに変換するにはどうすればよいですか?PythonアレイをPythonリストに変換するにはどうすればよいですか?May 01, 2025 am 12:05 AM

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。

Pythonにリストが存在する場合、配列を使用する目的は何ですか?Pythonにリストが存在する場合、配列を使用する目的は何ですか?May 01, 2025 am 12:04 AM

choosearraysoverlistsinperbetterperformance andmemoryeficiencyspecificscenarios.1)largeNumericaldatasets:Araysreducememoryusage.2)パフォーマンス - クリティカル操作:ArraysOfferSpeedBoostsfortsfortsclikeappendedoring.3)タイプリー:Arrayesenforc

リストの要素と配列を繰り返す方法を説明します。リストの要素と配列を繰り返す方法を説明します。May 01, 2025 am 12:01 AM

Pythonでは、ループに使用し、列挙し、包括的なリストを通過することができます。 Javaでは、従来のループを使用し、ループを強化してアレイを通過することができます。 1。Pythonリストトラバーサル方法は、ループ、列挙、およびリスト理解のためのものです。 2。Javaアレイトラバーサル法には、従来のループとループ用の強化が含まれます。

Python Switchステートメントとは何ですか?Python Switchステートメントとは何ですか?Apr 30, 2025 pm 02:08 PM

この記事では、バージョン3.10で導入されたPythonの新しい「マッチ」ステートメントについて説明します。これは、他の言語のスイッチステートメントに相当するものです。コードの読みやすさを向上させ、従来のif-elif-elよりもパフォーマンスの利点を提供します

Pythonの例外グループとは何ですか?Pythonの例外グループとは何ですか?Apr 30, 2025 pm 02:07 PM

Python 3.11の例外グループは、複数の例外を同時に処理することで、同時シナリオと複雑な操作でエラー管理を改善します。

Pythonの関数注釈とは何ですか?Pythonの関数注釈とは何ですか?Apr 30, 2025 pm 02:06 PM

Pythonの関数注釈は、タイプチェック、ドキュメント、およびIDEサポートの関数にメタデータを追加します。それらはコードの読みやすさ、メンテナンスを強化し、API開発、データサイエンス、ライブラリの作成において重要です。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

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