ソリューションが何であるかを私に説明することができ、私にエラーunhashable type: dict
を与えていますまたはset
にあります。それはキーがハッシュ可能でなければならないので機能しません。一般的な規則として、不変なオブジェクト(文字列、整数、浮動小数点数、frozensets、immutablesのタプル)のみがハッシュ可能です(例外は可能です)。これはうまくいきません:
dictをキーとして使用するには、最初にハッシュされるものにする必要があります。
>>> key = frozenset(dict_key.items())
今、あなたはdict
かset
でキーとしてkey
を使用できます:
キーとして使用したい辞書のみ不変の値で構成されている場合、あなたはこのようなことのハッシュ可能な表現を作成することができます
>>> some_dict[key] = True
>>> some_dict
{frozenset([('a', 'b')]): True}
あなたは辞書を使って何かを調べたい時はいつでも練習を繰り返す必要があります。もちろん、
:場合
>>> some_dict[dict_key] # Doesn't work
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> some_dict[frozenset(dict_key.items())] # Works
True
をあなたがキーとして使用したいのは、それ自体がディクテーションやリストです。将来のキーを再帰的に「フリーズ」する必要があります。ここでは出発点です:私たちが見ることができるように
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
RTD http://docs.python.org/2.7/library/stdtypes.html#mapping-types-dict – iMom0
エラーレポートを表示するために便利になるだろうどの行に問題がありますか? – drevicko