Maison  >  Article  >  développement back-end  >  Comment implémenter une table de hachage bidirectionnelle efficace en Python ?

Comment implémenter une table de hachage bidirectionnelle efficace en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 20:57:02989parcourir

How to Implement an Efficient Bidirectional Hash Table in Python?

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

Une table de hachage bidirectionnelle permet à la fois des recherches clé-valeur et valeur-clé. Bien que la structure de données dict intégrée de Python excelle dans les recherches clé-valeur, elle n'offre pas d'extractions valeur-clé efficaces.

Une méthode efficace pour implémenter une table de hachage bidirectionnelle consiste à utiliser une classe cela étend le dict standard. Cette classe, nommée bidict, maintient un répertoire inverse qui se met automatiquement à jour avec toute modification apportée au dict normal.

Implémentation du code :

<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>

Principales caractéristiques :

  • Le répertoire inverse (bd.inverse) est un dictionnaire qui mappe les valeurs à une liste de clés avec cette valeur.
  • Le répertoire inverse se met automatiquement à jour lorsque le bidict est modifié.
  • Contrairement à certaines implémentations de Bidict, cette classe 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                   # Now two keys have the same value (= 1)
print(bd)                     # {'a': 1, 'c': 1, 'b': 2}
print(bd.inverse)             # {1: ['a', 'c'], 2: ['b']}
del bd['c']
print(bd)                     # {'a': 1, 'b': 2}
print(bd.inverse)             # {1: ['a'], 2: ['b']}
del bd['a']
print(bd)                     # {'b': 2}
print(bd.inverse)             # {2: ['b']}
bd['b'] = 3
print(bd)                     # {'b': 3}
print(bd.inverse)             # {2: [], 3: ['b']}</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