Bagian kode ini memberi saya kesalahan, unhashable type: dict
adakah yang bisa menjelaskan kepada saya apa solusinya?
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)
Jawaban:
Anda mencoba menggunakan
dict
sebagai kunci untuk yang laindict
atau dalamset
. Itu tidak berfungsi karena kuncinya harus dapat hashable. Sebagai aturan umum, hanya objek yang tidak dapat diubah (string, integer, float, frozenset, tuple of immutables) yang dapat hashable (meskipun pengecualian dimungkinkan). Jadi ini tidak berhasil:Untuk menggunakan dikt sebagai kunci, Anda perlu mengubahnya menjadi sesuatu yang mungkin di-hash terlebih dahulu. Jika dikt yang ingin Anda gunakan sebagai kunci hanya terdiri dari nilai-nilai yang tidak dapat diubah, Anda dapat membuat representasi hash untuk itu seperti ini:
Sekarang Anda dapat menggunakan
key
sebagai kunci di dalamdict
atauset
:Tentu saja Anda harus mengulang latihan kapan pun Anda ingin mencari sesuatu menggunakan dikt:
Jika
dict
Anda ingin menggunakan sebagai kunci memiliki nilai-nilai yang sendiri adalah dicts dan / atau daftar, Anda perlu secara rekursif "membekukan" kunci prospektif. Inilah titik awalnya:sumber
str(my_dict)
dapat mengembalikan dua string yang berbeda untuk dikte yang sama (atau berbeda, tetapi setara)dict(the_frozenset)
.frozenset(dict_key.items())
berpotensi bermasalah karena dua dicts dengan konten yang sama tetapi urutan penyisipan yang berbeda mungkin tidak menghasilkan kunci yang sama. Menambahkan panggilan ke diurutkan () tampaknya berurutan. Misalnyafrozenset(sorted(dict_key.items()))
Selain itu, frozenset sepertinya pilihan aneh mengingat bahwa set secara eksplisit tidak teratur. Ini mungkin berfungsi dengan baik dalam praktek, tetapi tuple sepertinya pilihan yang lebih logis bagi saya. Saya pergi bersamatuple(sorted(dict_key.items()))
Solusi yang mungkin adalah menggunakan metode JSON dumps (), sehingga Anda dapat mengonversi kamus ke string ---
Keluaran -
sumber
dumps
tidakdump
.