Combiner OrderedDict et defaultdict pour un dict par défaut ordonné
OrderedDict et defaultdict sont deux structures de données puissantes du module de collections de Python. OrderedDict conserve l'ordre de ses éléments, tandis que defaultdict fournit une valeur par défaut pour les clés manquantes. Cependant, combiner ces fonctionnalités dans une seule structure de données peut s'avérer difficile.
Implémentation personnalisée à l'aide de DefaultOrderedDict
Une solution possible consiste à créer une classe personnalisée appelée DefaultOrderedDict qui hérite de OrderedDict et ajoute une fonctionnalité de valeur par défaut. Voici une implémentation inspirée d'une réponse Stack Overflow :
<code class="python">from collections import OrderedDict, Callable class DefaultOrderedDict(OrderedDict): # Source: http://stackoverflow.com/a/6190500/562769 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 # Override __getitem__ to handle missing keys def __getitem__(self, key): try: return OrderedDict.__getitem__(self, key) except KeyError: return self.__missing__(key) # Raise KeyError if no default factory is provided def __missing__(self, key): if self.default_factory is None: raise KeyError(key) self[key] = value = self.default_factory() return value # ... (additional methods and overrides for copy, deepcopy, and repr)</code>
Cette classe DefaultOrderedDict combine les fonctionnalités de OrderedDict et de defaultdict, permettant un accès ordonné aux éléments et fournissant une valeur par défaut pour les clés manquantes.
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!