Dieser Code gibt mir einen Fehler. unhashable type: dict
Kann mir jemand erklären, was die Lösung ist?
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)
Antworten:
Sie versuchen, a
dict
als Schlüssel für ein anderesdict
oder in einem zu verwendenset
. Das funktioniert nicht, weil die Schlüssel hashbar sein müssen. In der Regel sind nur unveränderliche Objekte (Zeichenfolgen, Ganzzahlen, Gleitkommazahlen, Frozensets, Tupel von unveränderlichen Objekten) hashbar (obwohl Ausnahmen möglich sind). Das funktioniert also nicht:Um ein Diktat als Schlüssel zu verwenden, müssen Sie es in etwas verwandeln, das möglicherweise zuerst gehasht wird. Wenn das Diktat, das Sie als Schlüssel verwenden möchten, nur aus unveränderlichen Werten besteht, können Sie eine hashbare Darstellung davon wie folgt erstellen:
Jetzt können Sie
key
als Schlüssel in einemdict
oder verwendenset
:Natürlich müssen Sie die Übung wiederholen, wenn Sie etwas mit einem Diktat nachschlagen möchten:
Wenn der
dict
Schlüssel, den Sie als Schlüssel verwenden möchten, Werte und / oder Listen enthält, müssen Sie den potenziellen Schlüssel rekursiv "einfrieren". Hier ist ein Ausgangspunkt:quelle
str(my_dict)
zwei verschiedene Zeichenfolgen für dieselben (oder unterschiedliche, aber gleichwertige) Wörter zurückgebendict(the_frozenset)
.frozenset(dict_key.items())
möglicherweise problematisch ist, da zwei Diktate mit demselben Inhalt, aber unterschiedlicher Einfügereihenfolge möglicherweise nicht zu demselben Schlüssel führen. Das Hinzufügen eines Aufrufs zu sorted () scheint in Ordnung zu sein. ZBfrozenset(sorted(dict_key.items()))
Darüber hinaus scheint Frozenset eine seltsame Wahl zu sein, da Mengen explizit ungeordnet sind. In der Praxis funktioniert es wahrscheinlich gut, aber Tupel scheint mir eine logischere Wahl zu sein. Ich ging mittuple(sorted(dict_key.items()))
Eine mögliche Lösung könnte darin bestehen, die JSON-Methode dumps () zu verwenden, damit Sie das Wörterbuch in eine Zeichenfolge konvertieren können ---
Ausgabe -
quelle
dumps
nicht seindump
.