Unveränderlicher Typ DICT

Unveränderlicher Typ DICT
In Python bezieht sich ein Wörterbuch auf eine ungeordnete Sammlung von Schlüsselwertpaaren. Jeder Schlüssel wird einem bestimmten Wert innerhalb des Wörterbuchs zugeordnet. Der Schlüssel eines Wörterbuchs ist eindeutig und wird verwendet, um auf den entsprechenden Wert zuzugreifen.

Ein Schlüssel eines Python -Wörterbuchs muss jedoch hashabel sein. Ein Hash -Objekt bedeutet, dass das Objekt unveränderlich ist und einen einzigartigen Hash -Wert erzeugen kann.

Daher führt die Verwendung eines unveränderlichen Objekts als Schlüssel eines Wörterbuchs zu einem Fehler.

Lassen Sie uns diskutieren, wie wir diesen Fehler beheben können.

Beispielfehler

Betrachten Sie den folgenden Code, der zeigt, wie dieser Fehlertyp auftritt.

Entwickler = "Spiele": 200, "Datenbank": 100, "full_stack": 500
>>> Mitarbeiter = Entwickler: 800
Traceback (letzte Anruflast):
Datei "", Zeile 1, in
TypeError: Rückgierbarer Typ: 'Diktier' '

Im obigen Beispiel beginnen wir zunächst ein Wörterbuch, das den Entwicklertyp und die Gesamtzahl enthält.

Wir erstellen ein Mitarbeiterwörterbuch, das das Wörterbuch des Entwicklers als Schlüssel im zweiten Teil nimmt.

Da ein Wörterbuch unsicher ist, kann Python es nicht als Schlüssel eines Wörterbuchs verwenden.

Python überprüfen, ob Objekt hashabel ist

Die Frage kommt, woher weiß ich, ob ein Objekt hashabel ist oder nicht? In Python können Sie die Hash -Funktion verwenden, um festzustellen, ob ein Objekt Hashable ist.

Ein Beispiel ist wie gezeigt:

>>> Hash ("Schlüssel")
-4481039435095198476

Wenn ein Objekt hashable ist, sollte es einen einzigartigen Hash zurückgeben, wie im obigen Beispiel gezeigt. Da eine Saite Hashable ist, gibt sie einen einzigartigen Hash zurück.

Wenn Sie dieselbe Operation in einem Wörterbuch oder einer Liste versuchen, erhalten Sie wie gezeigt einen Fehler:

>>> Hash ([1,2,3,4,5])
Traceback (letzte Anruflast):
Datei "", Zeile 1, In
TypeError: Nicht abhängiger Typ: 'Liste' '

Es ist nicht hashierbar, da eine Liste veränderlich ist, wie im obigen Fehler gezeigt.

Fix: TypeError: Nicht abgehackbarer Typ: 'Diktat'

Wenn Sie ein Wörterbuch als Schlüssel für ein anderes Wörterbuch verwenden möchten, können Sie dies tun, indem Sie es zuerst in ein Tupel umwandeln.

Ein Tupel ist Hashable, wie im folgenden Beispiel gezeigt:

>>> Hash ((1,2,3,4,5))
-5659871693760987716

Lassen Sie uns unseren ersten Fehler lösen, indem wir das Wörterbuch des Entwicklers in ein Tupel umwandeln:

>>> Entwickler = Tuple (Entwickler)
>>> drucken (Entwickler)
('Games', 'Database', 'full_stack')

Sobald wir es in ein Tupel umwandeln, können wir es als Schlüssel im Wörterbuch wie gezeigt verwenden:

>>> Mitarbeiter = Entwickler: 800
>>> drucken (Mitarbeiter)
('Games', 'Datenbank', 'full_stack'): 800

Fix 2

Eine andere Lösung ist die Verwendung des Wörterbuchs als Wert. Zum Beispiel können wir das Wörterbuch des Entwicklers als Wert für das Wörterbuch der Mitarbeiter nutzen.

Nehmen Sie die Code -Illustration unten:

>>> Entwickler = "Spiele": 200, "Datenbank": 100, "full_stack": 500
>>> Mitarbeiter = "Mitarbeiter": Entwickler
>>> drucken (Mitarbeiter)
'Mitarbeiter': 'Games': 200, 'Datenbank': 100, 'full_stack': 500

In diesem Fall gibt der Code keinen Fehler zurück, da wir das Wörterbuch als Wert für ein neues Wörterbuch verwenden.

Verwenden einer für die Schleife

Eine weitere unkonventionelle Methode ist die Verwendung einer für die Schleife. Sie können jedes Schlüssel- und Wertpaar eines Wörterbuchs itererieren und zu einem neuen Wörterbuch hinzufügen.

Betrachten Sie das folgende Beispiel:

>>> Entwickler = "Spiele": 200, "Datenbank": 100, "full_stack": 500
>>> für k, v bei Entwicklern.Artikel():
… Mitarbeiter [k] = v

>>> Mitarbeiter
'Mitarbeiter': 'Games': 200, 'Datenbank': 100, 'full_stack': 500, 'Games': 200, 'Database': 100, 'full_stack': 500

In diesem Fall verwenden wir eine für die Schleife, um die Wörterbuchartikel der Entwickler zu iterieren und sie dem Mitarbeiter der Mitarbeiter anzuhängen.

Schließen

In diesem Artikel wurden drei Methoden zur Behebung des Fehlers "TypeError: Nicht gravierbar: 'Diktier" in Python untersucht.