Maison  >  Article  >  développement back-end  >  Comment puis-je créer un dictionnaire ordonné avec des valeurs par défaut en Python ?

Comment puis-je créer un dictionnaire ordonné avec des valeurs par défaut en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 03:37:30285parcourir

How can I create an ordered dictionary with default values in Python?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn