Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que je reçois une erreur \"TypeError: unhashable type: \'dict\'\" en Python et comment puis-je la corriger ?

Pourquoi est-ce que je reçois une erreur \"TypeError: unhashable type: \'dict\'\" en Python et comment puis-je la corriger ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 05:41:01222parcourir

Why am I getting a

TypeError : type non hachable : 'dict'

Cette erreur se produit lorsque vous essayez d'utiliser un dictionnaire comme clé dans un dictionnaire ou dans un ensemble. Pythons est constitué d'objets immuables (tels que des chaînes, des entiers, des flotteurs, des ensembles gelés et des tuples d'immuables) qui peuvent être hachés et peuvent servir de clés. Cependant, les dictionnaires sont mutables et donc non hachables.

Pour utiliser un dictionnaire comme clé, vous devez le convertir dans un format hachable. Si le dictionnaire ne contient que des valeurs immuables, vous pouvez en créer une représentation hachable à l'aide de Frozenset() :

<code class="python">dict_key = {"a": "b"}
key = frozenset(dict_key.items())</code>

Vous pouvez désormais utiliser key comme clé dans un dictionnaire ou définir :

<code class="python">some_dict[key] = True</code>

Si le dictionnaire contient des valeurs qui sont elles-mêmes des dictionnaires ou des listes, vous devez les convertir de manière récursive en formats hachables. Voici une fonction utilitaire qui peut vous aider :

<code class="python">def freeze(d):
    if isinstance(d, dict):
        return frozenset((key, freeze(value)) for key, value in d.items())
    elif isinstance(d, list):
        return tuple(freeze(value) for value in d)
    return d</code>

En utilisant cette fonction, vous pouvez geler le dictionnaire puis l'utiliser comme clé :

<code class="python">key = freeze(dict_key)
some_dict[key] = True</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn