Python erreur: unhashable type: 'liste'
J'ai commencé à apprendre le Python il ya quelques semaines (avec aucune connaissance préalable de celle-ci, ni de la programmation).
Je veux créer une définition qui sera donnée du dictionnaire comme un argument de retour d'un tuple composé de deux listes, l'une où il y a uniquement des clés de dictionnaire, et d'autres où il y a seulement les valeurs de la donnée du dictionnaire.
Fondamentalement, le code ressemblera à ceci:
"""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})
Ce code a fonctionné parfaitement (c'est pas ma solution, quoique).
Mais que faire si je ne veux pas utiliser le .les touches() et .les valeurs de() méthodes?
Dans ce cas, j'ai essayé d'utiliser quelque chose comme cela, mais je me suis "unhashable type: "liste "" message d'erreur:
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})
Ce qui semble être le problème?
Vous devez vous connecter pour publier un commentaire.
Que vous essayez d'utiliser l'ensemble de la
keys
liste comme une clé:Peut-être que vous vouliez utiliser
dict[key]
à la place? Unlist
est une mutable type, et ne peut pas être utilisé comme une clé dans un dictionnaire (il pourrait être changé en place de sorte que la clé n'est plus localisable dans la table de hachage interne du dictionnaire).Sinon, boucle sur le
.items()
séquence:S'il vous plaît ne pas utiliser
dict
comme un nom de variable; vous êtes de l'ombre à la type par le faire.values.append(dict[key])
vous ajoutez dictionnaire des valeurs de la liste. 🙂Une autre, plus simple (moins de risques de bugs) pour écrire votre fonction
Martijn réponse est bonne, mais notez également que votre échantillon initial n'a plus de travail que nécessaire. dict.les touches() et dict.les valeurs de() renvoient des listes et il n'y a pas de raison de les recréer. Le code pourrait être:
return
dans votre code?return