çözüm ne olduğunu açıklayabilir bana bir hata unhashable type: dict
veriyor veya set
'da. Bu işe yaramaz çünkü anahtarlar yıkanabilir olmalı. Genel bir kural olarak, sadece değişmez nesneler (dizeler, tamsayılar, yüzer parçalar, frozensetler, değişmezlerin uzuvları) yıkanabilir (istisnalar olsa da). Yani bu işe yaramazsa:
>>> dict_key = {"a": "b"}
>>> some_dict[dict_key] = True
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
ilk karma edilebilir bir şey haline çevirmek için gereken bir anahtar olarak bir dicti kullanın. Eğer anahtar olarak kullanmak istediğiniz dict sadece değişmez değerler oluşuyorsa, böyle bunun bir hashable temsilini oluşturabilirsiniz:
:
>>> key = frozenset(dict_key.items())
Artık bir dict
veya set
bir anahtar olarak key
kullanabilir
>>> 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
ise: Eğer bir dict kullanarak bir şeyler aramak istediğinizde tabii
>>> some_dict[key] = True
>>> some_dict
{frozenset([('a', 'b')]): True}
egzersize tekrarlamak zorundaanahtar olarak kullanmak istediğiniz kendi değerleri dikte ve/veya listeler var, olası anahtarı yinelemeli "dondurmak" gerekir. İşte başlangıç noktası:
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
O kadar görebildiğimiz hata raporu göstermek için yararlı olurdu hangi satırın sorunu var ... – drevicko