unhashable type: 'list'

Python Erreur courante

Explication

L'erreur `TypeError: unhashable type: 'list'` survient quand vous utilisez un objet **modifiable (mutable)** — une liste, un dictionnaire ou un set — là où Python exige un objet **hachable (hashable)** : comme **clé de dictionnaire**, comme **élément d'un set**, ou dans certaines opérations d'appartenance. Seuls les objets immuables (nombres, chaînes, tuples) peuvent être hachés. ```python cache = {} cache[[1, 2]] = "valeur" # une liste ne peut pas être une clé # TypeError: unhashable type: 'list' ```

Causes courantes

- **Liste utilisée comme clé de dictionnaire**. - **Liste ou set ajouté à un set** (`{[1, 2]}`). - **Liste comme élément d'un autre set** ou dans un `Counter`. - **Dépaquetage** d'une structure imbriquée mal formée.

1. Utilisez un tuple comme clé

Le tuple est immuable, donc hachable :

cache = {}
cache[(1, 2)] = "valeur"   # ✅ tuple comme clé

2. Convertissez en frozenset pour un ensemble immuable

groupes = set()
groupes.add(frozenset([1, 2]))   # ✅ ensemble hachable

3. Convertissez les listes en tuples avant insertion

vu = set()
for ligne in donnees:
    vu.add(tuple(ligne))   # ✅ tuple() rend la liste hachable

Comment prevenir cette erreur

- **Réfléchissez à l'immuabilité** : clés de dictionnaire et éléments de set doivent être immuables. - **Privilégiez les tuples** pour représenter des clés composées (`(annee, mois)`). - Référence : [docs.python.org — Objets hachables](https://docs.python.org/fr/3/glossary.html#term-hashable).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Pourquoi une liste n'est-elle pas hachable mais un tuple oui ?
Parce qu'une liste est modifiable : son contenu (et donc son hash) pourrait changer après insertion, ce qui casserait la structure du dictionnaire ou du set. Le tuple, immuable, garde un hash stable.
Comment utiliser une paire de valeurs comme clé ?
Mettez-les dans un tuple : `mon_dict[(x, y)] = ...`. Pour un ensemble d'éléments sans ordre, utilisez `frozenset(...)`.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.