ホームページ  >  記事  >  バックエンド開発  >  Python で辞書をキーとして使用する方法: 「TypeError: unhashable type: \'dict\'」エラーの解決

Python で辞書をキーとして使用する方法: 「TypeError: unhashable type: \'dict\'」エラーの解決

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 02:25:30354ブラウズ

How to Use Dictionaries as Keys in Python: Resolving the

TypeError: unhashable type: 'dict'

エラー メッセージ「TypeError: unhashable type: 'dict'」が表示された場合は、次のことを試みていることを示します。辞書を別の辞書内またはセット内のキーとして使用すること。キーはハッシュ可能性を備えている必要があるため、これは許可されません。ハッシュ可能性は通常、不変オブジェクト (文字列、数値、不変要素のタプル、凍結セットなど) によってのみサポートされます。

辞書をキーとして利用するには、次のようにします。それをハッシュ可能な表現に変換する必要があります。辞書に不変の値のみが含まれている場合は、それを不変のデータ構造に固定することでこれを実現できます:

<code class="python">key = frozenset(dict_key.items())</code>

これで、他の辞書またはセットのキーとして 'key' を使用できるようになります:

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

ディクショナリを使用してデータにアクセスする場合は常に、凍結された表現を一貫して使用する必要があることに注意してください。

<code class="python">some_dict[dict_key]  # This will raise an error
some_dict[frozenset(dict_key.items())]  # This works</code>

ディクショナリの値自体がディクショナリまたはリストである場合、ハッシュ可能性を確保するには、再帰的フリーズを採用する必要があります:

<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>

この関数を活用することで、辞書をフリーズし、ハッシュ可能な構造のキーとして使用できます:

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

以上がPython で辞書をキーとして使用する方法: 「TypeError: unhashable type: \'dict\'」エラーの解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。