Maison > Article > développement back-end > Comment utiliser des dictionnaires comme clés en Python : résolution de l'erreur \'TypeError: unhashable type: \'dict\'\'
Face au message d'erreur "TypeError : type unhashable : 'dict'", cela indique que vous essayez pour utiliser un dictionnaire comme clé dans un autre dictionnaire ou dans un ensemble. Ceci n'est pas autorisé car les clés doivent posséder une capacité de hachage, qui n'est généralement prise en charge que par des objets immuables (chaînes, nombres, tuples d'éléments immuables, ensembles figés, etc.).
Pour utiliser un dictionnaire comme clé, vous besoin de le transformer en une représentation hachable. Si le dictionnaire contient uniquement des valeurs immuables, vous pouvez y parvenir en le figeant dans une structure de données immuable :
<code class="python">key = frozenset(dict_key.items())</code>
Maintenant, vous pouvez utiliser « clé » comme clé dans d'autres dictionnaires ou ensembles :
<code class="python">some_dict[key] = True</code>
Gardez à l'esprit que vous devez systématiquement utiliser la représentation figée chaque fois que vous souhaitez accéder aux données à l'aide du dictionnaire :
<code class="python">some_dict[dict_key] # This will raise an error some_dict[frozenset(dict_key.items())] # This works</code>
Dans les cas où les valeurs du dictionnaire sont elles-mêmes des dictionnaires ou des listes, vous devra utiliser le gel récursif pour garantir la hachabilité :
<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 tirant parti de cette fonction, vous pouvez geler votre dictionnaire et l'utiliser comme clé dans les structures hachables :
<code class="python">frozen_dict = freeze(dict_key) some_dict[frozen_dict] = 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!