Python Forum
Unhasshable type 'list' - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Unhasshable type 'list' (/thread-11666.html)



Unhasshable type 'list' - Piqurs - Jul-20-2018

Hi, so I'm getting this error
Error:
if kata in set(KATA_GANTI_1) | set(KATA_GANTI_2) | set(KATA_GANTI_3) | set(SUBJEK): TypeError: unhashable type: 'list'
I don't know what is wrong with my code. It suppose to print the Subject of the sentence that I input


#deklarasi kelas kata
KATA_GANTI_1    = ['saya','Saya', 'mereka', 'kami',  'kita', 'aku', 'beta', 'daku', 'engkau']
KATA_GANTI_2    = ['anda' , 'kamu', 'engkau', 'kau', 'dikau', 'mu' , 'kalian' , 'kamu sekalian' , 'sekalian' ]
KATA_GANTI_3    = ['mereka','nya','ia','beliau','dia','bapak', 'ayah', 'ibu', 'mama' 'kakak', 'kakek', 'adik', 'nenek', 'abang', 'tante', 'bibi', 'paman']
SUBJEK          = [KATA_GANTI_1 , KATA_GANTI_2, KATA_GANTI_3]
PREDIKAT        = ['mengatakan' , 'berkata' , 'bertanya' , 'menanyakan' , 'memerintah' , 'memerintahkan' , 'menyuruh' , 'memberitahu']
KATA_HUBUNG_BERITA          = ['bahwa' , 'supaya']
KATA_HUBUNG_TANYA_TOTAL     = ['apakah' , 'kah']
KATA_HUBUNG_TANYA_PARSIAL   = ['tentang',]
KET_SIFAT   = ['sangat', 'lebih', 'kurang', 'cukup' ,'paling' , 'agak']
KATA_SIFAT  = ['cantik' 'jelek' , 'tinggi' , 'pendek' , 'kesal' , 'rapi' , 'banyak' , 'berat' , 'hebat' ]
KET_WAKTU   = ['kemarin', 'besok', 'sekarang', 'kini', 'lusa', 'siang', 'malam', 'pagi', 'sebelum', 'sesudah', 'baru saja' , 'barusan','saat', 'sesaat', 'sewaktu', 'seketika', 'yang lalu' , 'tadi']
#==========================================================================================================#
 
#token
from nltk.tokenize import word_tokenize
nama = input ("Masukkan Kalimat : ")
kalimat = nama.lower().split()
kalpeng = (nama[nama.find('.') + 1:nama.find('“')])
kalsung = (nama[nama.find('“') + 1:nama.find('”')])
for index, kata in enumerate (kalimat):
    if kata in set(KATA_GANTI_1) | set(KATA_GANTI_2) | set(KATA_GANTI_3) | set(SUBJEK):
        x = "Subjek"
        print (kata + "adalah ", x)
    else :
        print ("Tidak ada Subjek")



RE: Unhasshable type 'list' - buran - Jul-20-2018

SUBJEK is list of lists, so it's not hashable. That is exactly what the error says...

>>> my_list = [[1,2], [3,4]]
>>> set(my_list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
I don't see the point of adding set(SUBJEK). i.e. kata is str, elements in SUBJEK are of type list


RE: Unhasshable type 'list' - woooee - Jul-20-2018

And instead of converting to a set on each pass through the for, convert once before the for and check that
KATA_GANTI_1    = ['saya','Saya', 'mereka', 'kami',  'kita', 'aku', 'beta', 'daku', 'engkau']
KATA_GANTI_2    = ['anda' , 'kamu', 'engkau', 'kau', 'dikau', 'mu' , 'kalian' , 'kamu sekalian'
KATA_GANTI_3    = ['mereka','nya','ia','beliau','dia','bapak', 'ayah', 'ibu', 'mama' 'kakak', '

## can also be done on one line
all_as_set=KATA_GANTI_1 + KATA_GANTI_2 + KATA_GANTI_3
all_as_set=set(all_as_set)