Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann eine bidirektionale Hash-Tabelle in Python eine effiziente schlüssel- und wertbasierte Indizierung ermöglichen?

Wie kann eine bidirektionale Hash-Tabelle in Python eine effiziente schlüssel- und wertbasierte Indizierung ermöglichen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 00:46:30235Durchsuche

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

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:

  • Das inverse Attribut verwaltet eine Zuordnung von Werten zu einer Liste von Schlüsseln.
  • Wenn ein Schlüssel-Wert-Paar hinzugefügt wird, wird die inverse Zuordnung automatisch aktualisiert.
  • Wenn ein Schlüssel gelöscht wird, wird auch die inverse Zuordnung aktualisiert aktualisiert, um den Schlüssel zu entfernen.
  • Die bidirektionale Natur ermöglicht sowohl den d[Schlüssel]- als auch den d[Wert]-Zugriff.
  • Es ermöglicht, dass mehrere Schlüssel denselben Wert haben.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn