I am trying to check if a word exists in the dict. If does not that I will add the key and value to the dict:
mydict = {}
with io.open("fileo.txt", "r", encoding="utf-8") as fileo:
for Word in filei:
Word = Word.split()
if not Word in dict:
dict[Word] = 1
elif Word in dict:
dict[Word] = dict[Word] + 1
print [unicode(i) for i in dict.items()]
It throws below error:
if not Word in dict:
TypeError: unhashable type: 'list'
If I remove the Word = Word.split() part it works, but entire line is considered. That will not help me. I want to count every word as you can see.
解决方案
Word = Word.split() will make Word a list, and you cannot have a list (or any other unhashable type) as a dictionary key.
You should consider using collections.Counter, but to slightly modify your existing code:
with io.open("fileo.txt", "r", encoding="utf-8") as filei:
d = dict()
for line in filei:
words = line.strip().split()
for word in words:
if word in d:
d[word] += 1
else:
d[word] = 1
print d
print [unicode(i) for i in d.items()]