python - lista - TypeError: tipo de ajuste insondable: ''dict''
python lista extend (1)
Estás tratando de usar un dict
como clave para otro dict
o en un set
. Eso no funciona porque las claves tienen que ser manejables. Como regla general, solo los objetos inmutables (cadenas, enteros, flotantes, conjuntos congelados, tuplas de elementos inmutables) son aptos para ser procesados (aunque las excepciones son posibles). Entonces esto no funciona:
>>> dict_key = {"a": "b"}
>>> some_dict[dict_key] = True
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: ''dict''
Para usar un dict como clave, primero debes convertirlo en algo que se pueda haschar. Si el dict que desea usar como clave consta de valores inmutables, puede crear una representación que pueda procesarse de esta manera:
>>> key = frozenset(dict_key.items())
Ahora puede usar la key
como una clave en un dict
o set
:
>>> some_dict[key] = True
>>> some_dict
{frozenset([(''a'', ''b'')]): True}
Por supuesto, necesita repetir el ejercicio cada vez que quiera buscar algo con un dict:
>>> 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
Si el dict
que desea usar como clave tiene valores que en sí mismos son dictados y / o listas, necesita recursivamente "congelar" la clave prospectiva. Aquí hay un punto de partida:
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
Esta pieza de código me está dando un unhashable type: dict
error unhashable type: dict
¿alguien puede explicarme cuál es la solución?
negids = movie_reviews.fileids(''neg'')
def word_feats(words):
return dict([(word, True) for word in words])
negfeats = [(word_feats(movie_reviews.words(fileids=[f])), ''neg'') for f in negids]
stopset = set(stopwords.words(''english''))
def stopword_filtered_word_feats(words):
return dict([(word, True) for word in words if word not in stopset])
result=stopword_filtered_word_feats(negfeats)