Implémentation d'un dict ordonné par défaut
Le module de collections intégré à Python fournit à la fois OrderedDict et defaultdict, chacun offrant des fonctionnalités distinctes. Un OrderedDict préserve l'ordre d'insertion de ses éléments, tandis qu'un defaultdict génère automatiquement des valeurs par défaut pour les clés manquantes en fonction d'une fonction d'usine spécifiée.
Combiner la puissance des deux
En combinant les capacités des deux structures de données, on peut créer un dict ordonné par défaut qui conserve l'ordre de ses éléments et initialise les clés manquantes avec des valeurs par défaut. Ceci peut être réalisé en étendant la classe OrderedDict.
Classe personnalisée : DefaultOrderedDict
La classe personnalisée suivante DefaultOrderedDict hérite de OrderedDict et ajoute la fonctionnalité permettant de gérer les clés manquantes :
<code class="python">from collections import OrderedDict, Callable class DefaultOrderedDict(OrderedDict): def __init__(self, default_factory=None, *a, **kw): if (default_factory is not None and not isinstance(default_factory, Callable)): raise TypeError('first argument must be callable') OrderedDict.__init__(self, *a, **kw) self.default_factory = default_factory def __getitem__(self, key): try: return OrderedDict.__getitem__(self, key) except KeyError: return self.__missing__(key) def __missing__(self, key): if self.default_factory is None: raise KeyError(key) self[key] = value = self.default_factory() return value</code>
Utilisation
Cette classe peut être utilisée de la même manière qu'un OrderedDict normal :
<code class="python">ordered_default_dict = DefaultOrderedDict(lambda: 0) ordered_default_dict['key1'] = 1 ordered_default_dict['key2'] = 2</code>
Cependant, si une clé est non présent, la valeur par défaut de la fonction d'usine est générée :
<code class="python">print(ordered_default_dict['missing_key']) # Output: 0</code>
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!