86 votes

Tableaux de hachage en Python

Est-il possible de hacher lists ?

Par exemple, je sais que les hachages de tuples sont possibles :

>>> hash((1,2,3,4,5,6))
-319527650

Mais est-il possible de hacher un list ?

>>> hash([1,2,3,4,5,6])
hash_value

Solution possible :

Explication très détaillée du hachage des listes, ici.

77voto

Roman Bodnarchuk Points 12136

Essayez-le :

>>> hash((1,2,3))
2528502973977326415
>>> hash([1,2,3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> hash(frozenset((1,2,3)))
-7699079583225461316
>>> hash(set((1,2,3)))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'

Donc vous pouvez obtenir hash de tuple et frozenset puisqu'ils sont immuables, et vous ne pouvez pas le faire pour les list et set car ils sont mutables.

36voto

Ohmless Points 701

Si vous avez vraiment besoin d'utiliser une liste comme clé de dictionnaire, essayez d'abord de la convertir en chaîne de caractères.
my_list = str(my_list)

9voto

Ned Batchelder Points 128913

Python ne vous permet pas d'utiliser des données mutables comme clés dans les dictionnaires, car les changements après l'insertion rendraient l'objet introuvable. Vous pouvez utiliser des tuples comme clés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X