Comment une table de hachage bidirectionnelle en Python peut-elle permettre une indexation efficace basée sur les clés et les valeurs ?

Barbara Streisand
Libérer: 2024-10-31 00:46:30
original
245 Les gens l'ont consulté

How can a bidirectional hash table in Python enable efficient key- and value-based indexing?

Mise en œuvre d'une table de hachage bidirectionnelle efficace

Une table de hachage ou une structure de données de dictionnaire offre une indexation et une récupération efficaces des valeurs par clés. Cependant, il est parfois souhaitable d'indexer également par valeurs. Une table de hachage bidirectionnelle permet une indexation basée sur des clés et des valeurs.

Implémentation personnalisée à l'aide d'une classe bidirectionnelle

L'implémentation Python dict fournit un mappage unidirectionnel à partir des clés aux valeurs. Pour créer une table de hachage bidirectionnelle, nous pouvons créer notre propre classe qui hérite de la classe dict :

<code class="python">class bidict(dict):
    def __init__(self, *args, **kwargs):
        super(bidict, self).__init__(*args, **kwargs)
        self.inverse = {}
        for key, value in self.items():
            self.inverse.setdefault(value, []).append(key)

    def __setitem__(self, key, value):
        if key in self:
            self.inverse[self[key]].remove(key)
        super(bidict, self).__setitem__(key, value)
        self.inverse.setdefault(value, []).append(key)

    def __delitem__(self, key):
        self.inverse.setdefault(self[key], []).remove(key)
        if self[key] in self.inverse and not self.inverse[self[key]]:
            del self.inverse[self[key]]
        super(bidict, self).__delitem__(key)</code>
Copier après la connexion

Principales caractéristiques :

  • L'attribut inverse maintient un mappage des valeurs vers une liste de clés.
  • Lorsqu'une paire clé-valeur est ajoutée, le mappage inverse est mis à jour automatiquement.
  • Lorsqu'une clé est supprimée, le mappage inverse est également mis à jour pour supprimer la clé.
  • La nature bidirectionnelle permet à la fois l'accès d[key] et d[value].
  • Elle permet à plusieurs clés d'avoir la même valeur.

Exemple d'utilisation :

<code class="python">bd = bidict({'a': 1, 'b': 2})

print(bd)  # {'a': 1, 'b': 2}
print(bd.inverse)  # {1: ['a'], 2: ['b']}

bd['c'] = 1  # Two keys have the same value
print(bd)  # {'a': 1, 'c': 1, 'b': 2}
print(bd.inverse)  # {1: ['a', 'c'], 2: ['b']}</code>
Copier après la connexion

Avantages :

Cette implémentation combine l'efficacité de la structure de données dict de Python avec la flexibilité de accès bidirectionnel. C'est un outil puissant pour diverses applications où une indexation basée sur les valeurs est nécessaire.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!