Maison  >  Article  >  développement back-end  >  Comment créer un dict par défaut ordonné en Python ?

Comment créer un dict par défaut ordonné en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-29 18:28:02562parcourir

How to Create an Ordered Default Dict in Python?

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!

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