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

Linda Hamilton
Libérer: 2024-10-29 18:28:02
original
561 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal