Python-Fehler: unhashable type: 'list'
Habe ich angefangen zu lernen-Python-vor einigen Wochen (ohne Vorherige Kenntnisse oder Programmierung).
Ich möchte zu erstellen, eine definition, die für bestimmte dictionary als argument zurück, der ein Tupel aus zwei Listen - eine, wo es gibt nur Tasten für Wörterbuch, und den anderen, wo es nur Werte der jeweiligen Wörterbuch.
Im Grunde wird der code wie folgt Aussehen:
"""Iterate over the dictionary named letters, and populate the two lists so that
keys contains all the keys of the dictionary, and values contains
all the corresponding values of the dictionary. Return this as a tuple in the end."""
def run(dict):
keys = []
values = []
for key in dict.keys():
keys.append(key)
for value in dict.values():
values.append(value)
return (keys, values)
print run({"a": 1, "b": 2, "c": 3, "d": 4})
Dieser code funktionierte perfekt (es ist nicht meine Lösung aber).
Aber was ist, wenn ich nicht wollen, verwenden Sie die .keys() und .Werte() Methoden?
In diesem Fall, ich habe versucht, über so etwas wie dieses, aber ich habe "unhashable type: 'list'" Fehlermeldung:
def run(dict):
keys = []
values = []
for key in dict:
keys.append(key)
values.append(dict[keys])
return (keys, values)
print run({"a": 1, "b": 2, "c": 3, "d": 4})
Was zu sein scheint das problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie zu verwenden versuchen das ganze
keys
Liste als Schlüssel:Vielleicht haben Sie gedacht, um die Verwendung
dict[key]
statt? Einlist
ist eine veränderliche Art, und kann nicht verwendet werden, die als Schlüssel in einem dictionary (es könnte sich ändern-Stelle, die den Schlüssel nicht mehr lokalisierbar in die interne hash-Tabelle des Wörterbuchs).Alternativ Schleife über die
.items()
Reihenfolge:Verwenden Sie bitte nicht
dict
als Namen einer Variablen; Sie spiegeln die built-in-Typ zu tun.values.append(dict[key])
Sie hinzufügen Wörterbuch-Werte in die Liste. 🙂Anderen einfacheren (weniger Chancen für bugs) Art und Weise zu schreiben, Ihre Funktion
Martijn ' s Antwort ist richtig, aber beachten Sie auch, dass Ihre ursprünglichen Stichprobe nicht mehr Arbeit als es muss. dict.keys() und dict.Werte (mit) beiden Listen zurück und es gibt keinen Grund auf neu erstellen. Der code könnte sein:
return
im code?return