Implementierung einer effizienten bidirektionalen Hash-Tabelle
Eine Hash-Tabelle oder Wörterbuchdatenstruktur bietet eine effiziente Indizierung und den Abruf von Werten anhand von Schlüsseln. Manchmal ist es jedoch wünschenswert, auch nach Werten zu indizieren. Eine bidirektionale Hash-Tabelle ermöglicht sowohl schlüsselbasierte als auch wertbasierte Indizierung.
Benutzerdefinierte Implementierung mithilfe einer bidirektionalen Klasse
Die Python-Dict-Implementierung bietet eine unidirektionale Zuordnung von Schlüsseln zu Werten. Um eine bidirektionale Hash-Tabelle zu erstellen, können wir unsere eigene Klasse erstellen, die von der dict-Klasse erbt:
<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>
Hauptmerkmale:
Beispielverwendung:
<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>
Vorteile:
Diese Implementierung kombiniert die Effizienz der Diktatdatenstruktur von Python mit der Flexibilität von bidirektionaler Zugriff. Es ist ein leistungsstarkes Tool für verschiedene Anwendungen, bei denen eine wertbasierte Indizierung erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie kann eine bidirektionale Hash-Tabelle in Python eine effiziente schlüssel- und wertbasierte Indizierung ermöglichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!