Maison > Article > développement back-end > Comment une table de hachage bidirectionnelle en Python peut-elle permettre une indexation efficace basée sur les clés et les valeurs ?
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>
Principales caractéristiques :
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>
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!