Maison  >  Article  >  développement back-end  >  Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

WBOY
WBOYavant
2023-04-12 09:04:101324parcourir

Avant-propos

Cet article présente principalement les scénarios d'application et les exemples d'utilisation de plusieurs sous-classes d'extension intégrées de la classe dictionnaire (dict) dans le module de collection Python. Il est également combiné avec le code, afin que vous puissiez maîtriser directement ces sous-classes. liés à dict de manière "courte et rapide" Classes - OrderedDict, defaultdict, userDict.

OrderedDict

Le dictionnaire ordonné (OrderedDict) dans le module de collections Python ressemble à un dictionnaire normal, mais possède quelques fonctionnalités supplémentaires liées aux opérations de tri. OrderedDict se souvient de l'ordre dans lequel les clés ont été insérées. Ils deviennent moins importants maintenant car la classe dict intégrée a acquis la capacité de se souvenir de l'ordre d'insertion (ce nouveau comportement était garanti dans Python 3.7, donc OrderedDict semble moins important maintenant). Format général pour créer un dictionnaire ordonné :

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

ou

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

Cela crée et renvoie une instance de l'objet OrderedDict de la sous-classe dict, qui possède des méthodes spécifiquement pour réorganiser l'ordre du dictionnaire. Cet article présente brièvement ces méthodes.

1) popitem(last=True) :

La méthode popitem() du dictionnaire ordonné renvoie et supprime une paire (clé, valeur). Si last est True, la paire clé-valeur correspondante est renvoyée en mode LIFO (dernier entré, premier sorti) ; sinon, elle est renvoyée dans l'ordre FIFO (premier entré, premier sorti).

2) move_to_end(key, last=True) :

Déplacez les clés existantes à l'une ou l'autre extrémité du dictionnaire ordonné. Si last est True (valeur par défaut), l'élément est déplacé vers la droite ; si last est False, il est déplacé au début. Une KeyError sera levée si la clé n’existe pas.

Veuillez consulter le code :

Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

Supposons que nous supprimions et réinsérons la même clé dans OrderedDict. Il mettra cette clé à la fin pour conserver l’ordre d’insertion des clés. Un exemple est le suivant :

Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

Le résultat d'exécution est le suivant :

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

UserDict

La classe UserDict est utilisée comme wrapper pour les objets dictionnaire (dict) intégrés de Python. Le besoin de cette classe a été partiellement remplacé par la possibilité de sous-classer directement à partir de dict. Cependant, cette classe est plus facile à utiliser car le dictionnaire sous-jacent est accessible en tant qu'attribut. Utilisez UserDict lorsque vous souhaitez créer votre propre dictionnaire avec des fonctionnalités modifiées ou nouvelles. Son format d'utilisation est le suivant :

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

ou

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

Ce type de dictionnaire simulé a le contenu de son instance stocké dans un dictionnaire normal, accessible via l'attribut data de l'instance UserDict. Si initialdata est fourni, le contenu des données est initialisé avec cela ; notez que l'instance elle-même ne conserve pas de référence distincte (non exclusive) à initialdata, ce qui lui permet d'être utilisée à d'autres fins.

En plus de prendre en charge les méthodes et opérations mappées, les instances UserDict fournissent les attributs suivants :

1) data

Un véritable dictionnaire utilisé pour stocker le contenu de la classe UserDict. Un exemple est le suivant :

Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

Le résultat est le suivant :

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

Supposons que nous souhaitions définir un objet dictionnaire personnalisé qui prend en charge les opérations d'addition (fusion de deux dictionnaires). Lorsque nous ajoutons deux instances d'un dictionnaire personnalisé, nous nous attendons à obtenir un nouveau dictionnaire contenant tous les éléments des deux dictionnaires. Gardez à l’esprit que si vous essayez d’ajouter un dictionnaire standard en Python, vous obtiendrez une TypeError. Laissez-nous l'implémenter à l'aide de UserDict :

Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

Le résultat en cours d'exécution est le suivant :

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

Bien sûr, vous pouvez également implémenter vous-même d'autres opérations personnalisées associées.

DefaultDict

Un problème courant avec la classe Dictionary en Python est le manque de clés. Lorsque vous essayez d'accéder à une clé qui n'existe pas dans le dictionnaire, vous obtiendrez une exception KeyError. Ainsi, chaque fois que vous avez besoin d’accéder à un élément d’un dictionnaire, vous devez gérer cette situation. Heureusement, Python fournit la classe DefaultDict. Il est utilisé pour fournir une valeur par défaut pour les clés inexistantes sans déclencher KeyError.

DefaultDict est une sous-classe de la classe dict intégrée. Il remplace une méthode et ajoute une variable d'instance inscriptible. Le reste des fonctionnalités est le même que celui de dict. Le format d'utilisation est le suivant :

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

Le code ci-dessus renvoie un nouvel objet de type dictionnaire, DefaultDict, qui est une sous-classe de la classe dict intégrée.

Le premier paramètre fournit la valeur initiale de l'attribut default_factory, qui est par défaut Aucun. Tous les arguments restants sont traités comme s'ils étaient passés au constructeur dict, y compris les arguments de mots clés. Ce qu'il faut comprendre, c'est que si ce paramètre est fourni, il doit être appelable.

En plus de prendre en charge les opérations dict standard, l'objet DefaultDict prend également en charge les attributs de méthode suivants :

1) __missing__(key) :

Si l'attribut default_factory est None, l'utilisation de la clé comme paramètre déclenchera une exception KeyError.

Si default_factory n'est pas None, l'appeler sans argument fournit une valeur par défaut pour la clé donnée, qui est insérée dans le dictionnaire de la clé et renvoyée.

2)default_factory

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

Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

运行程序输出结果为:

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

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

我们再看一个示例:

Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

输出结果如下:

[('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的常量函数。示例代码如下:

Programmation Python : explication détaillée des sous-classes et applications du dictionnaire intégré (dict) (le tout au même endroit)

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

本文小结

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer