"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter une table de hachage bidirectionnelle efficace en Python ?

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

Publié le 2024-11-17
Parcourir:926

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 :

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)

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 :

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']}
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3