Python-Liste mit nicht hashbaren Typen

Python-W√∂rterbucher akzeptieren nur hashf√§hige Datentypen als Schlussel in einem W√∂rterbuch. Eine Liste ist kein hashbarer Datentyp. Wenn Sie eine Liste als Schlussel in einem W√∂rterbuch angeben, wird ein "TypeError: unhashable type: ‚Äòlist‚Äô‚" error.

In diesem Leitfaden sprechen wir daruber, was dieser Fehler bedeutet und warum er in Ihrem Code angezeigt wird. Wir werden ein Beispiel fur diesen Fehler durchgehen, um Ihnen zu zeigen, wie er behoben wird.

TypeError: unhashable type: ‘list’

Wörterbucher bestehen aus zwei Teilen: Schlusseln und Werten. Schlussel sind die Labels, die einem bestimmten Wert zugeordnet sind. Um auf einen Wert zuzugreifen, mussen Sie auf den Schlusselnamen dieses Werts verweisen.

Werte können zwar einen beliebigen Datentyp haben, aus Listen bis Strings, nur hashfähige Objekte werden als Schlussel akzeptiert. Hashfähige Objekte sind Objekte mit einem Hashwert, der sich im Laufe der Zeit nicht ändert. Beispiele fur hashfähige Objekte sind Tupel und Strings.

Listen haben keinen unveränderlichen Hashwert. Ihre Hash-Werte können sich im Laufe der Zeit ändern. Das bedeutet, dass Sie keine Liste als Wörterbuchschlussel angeben können.

Ein Beispielszenario

Lassen Sie uns ein Programm erstellen, das eine Liste von Schulern mit einer Durchschnittsnote von uber . erstellt 75. Diese Liste enthält Wörterbucheinträge jedes Schulers und seiner Noten. Um dieses Wörterbuch zu erstellen, arbeiten wir mit einem Wörterbuch mit einer Liste aller Schuler einer Schule und ihren Noten.

Beginnen wir mit der Definition einer Schulerliste und eines Wörterbuchs fur unsere besten Schuler:

Jeder Wert in "students‚" Liste ist ein W√∂rterbuch. Jedes W√∂rterbuch enth√§lt zwei Schlussel: Name und Noten. Wir haben ein W√∂rterbuch namens "top_students‚" die Informationen uber unsere Top-Studenten enth√§lt.

81 % der Teilnehmer gaben an, dass sie sich nach dem Besuch eines Bootcamps hinsichtlich ihrer Berufsaussichten im Tech-Bereich sicherer fuhlten. Werde noch heute zu einem Bootcamp gematcht.

Der durchschnittliche Bootcamp-Absolvent verbrachte weniger als sechs Monate im Karriereubergang, vom Start eines Bootcamps bis zur Suche nach seinem ersten Job.

Jetzt haben wir dies definiert Wörterbuch verwenden wir eine for-Schleife, um Schuler mit einer Durchschnittsnote von uber 75 herauszufiltern und sie unserem neuen Wörterbuch hinzuzufugen:

In jeder Iteration der for-Schleife berechnen wir den Durchschnitt aller Noten eines Schulers. Dazu teilen wir die Summe aller Noten durch die Anzahl der erfassten Noten.

Als nächstes prufen wir, ob dieser Durchschnitt größer als 75 ist. Wenn ja, erstellen wir einen neuen Eintrag in das top_students-Wörterbuch mit dem Namen eines Schulers und seinen Noten.

Schließlich drucken wir das top_students-Wörterbuch an die Konsole, damit wir alle Schuler mit einer Durchschnittsnote von uber 75 sehen:

Fuhren Sie unseren Code aus und sehen Sie was passiert:

Unser Code wird nicht erfolgreich ausgefuhrt.

The Lösung

Unser Code funktioniert, bis der Interpreter Zeile 11 erreicht. In dieser Zeile lautet unser Code:

Der Fehler in unserem Code ist, dass wir versucht haben, eine Liste als ein Schlussel in einem Wörterbuch. Wenn unser Code diese Zeile bei der ersten Iteration unserer Schleife analysiert, versucht unser Code, ein Wörterbuch mit dem folgenden Schlussel und Wert zu erstellen:

Dies ist ein ungultiges Wörterbuch. Unser Code versucht, eine Liste als Schlussel zuzuweisen, was nicht funktioniert.

Um dieses Problem zu lösen, verwenden wir den Namen des Schulers als Schlussel im Wörterbuch anstelle der Notenliste:

Wir haben die Notenliste als Wert statt als Schlussel zugewiesen. Der Name des Schulers ist der Schlussel im Wörterbuch. Lassen Sie uns unseren Code ausfuhren:

Unser Code erstellt erfolgreich ein Wörterbuch mit Informationen uber die leistungsstärksten Schuler. Jeder Schuler, dessen Durchschnittsnote in den letzten drei Tests uber 75 liegt, wurde dem Wörterbuch hinzugefugt.

Unser Wörterbuch gliedert sich wie folgt:

  • Schlussel: Linda, Holly
  • Werte: [84, 82, 65], [72, 74, 81]

Da wir unseren Schlusselnamen jetzt Strings zuweisen, funktioniert unser Code.

Schlussfolgerung

Der Fehler "TypeError: unhashable type: ‚Äòlist‚Äô‚" wird ausgel√∂st, wenn Sie versuchen, eine Liste als Schlussel in einem W√∂rterbuch zuzuweisen. Um diesen Fehler zu beheben, stellen Sie sicher, dass Sie nur ein hashf√§higes Objekt zuweisen, z String oder Tupel als Schlussel fur ein W√∂rterbuch.

Jetzt sind Sie bereit, diesen Fehler wie ein professioneller Programmierer zu beheben!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method