2017-01-10 6 views
0

mit möchte ich folgendes tun:Traceback Fehler, wenn eine Zählerfunktion

  1. lesen in einer Textdatei.
  2. Überprüfen Sie zeilenweise, ob Wörter mit Wörtern in einer Tagliste übereinstimmen.
  3. Erstellen Sie eine Frequenzzählung der Liste

Deshalb habe ich die folgenden:

tagList = {"later", "test"} 
aList = []; 
tagCount = {} 
from collections import Counter 

#Sample 
f = ["This is a test", "Call me later"] 
for line in f: 
    fields = line.split(' ') 
    for word in fields: 
     if word in tagList: 
      list = aList.append([word]) 

counts = Counter(aList) 

Es funktioniert alles, bis die Zählungen Teil in Ordnung. Wenn ich dies tue, erhalte ich den folgenden Fehler. Irgendwelche Gedanken darüber, was hier schief geht?

Traceback (most recent call last): 
    File "C:/Users/Marc/PycharmProjects/clustering/load.py", line 51, in <module> 
    counts = Counter(aList) 
    File "C:\Users\Marc\Anaconda3\lib\collections\__init__.py", line 530, in __init__ 
    self.update(*args, **kwds) 
    File "C:\Users\Marc\Anaconda3\lib\collections\__init__.py", line 617, in update 
    _count_elements(self, iterable) 
TypeError: unhashable type: 'list' 
+0

'aList.append (Wort)' ohne die eckigen Klammern –

+0

Teufel ist in den Details. Vielen Dank! –

Antwort

1

Sie zählen eine Liste von Listen. Jedes Element in aList ist selbst eine Liste, mit einem Wort in ihm:

list = aList.append([word]) 

Sie sind dort [word] in die Liste angehängt, so dass eine Liste mit einem Elemente.

Ein Counter versucht, jede Liste als Schlüssel zu verwenden, was nicht möglich ist, da Listenobjekte veränderbar und daher nicht hashbar sind.

Sie wollen nicht Listen zählen, möchten Sie Worte, zählen, so ohne eine umgebende Liste nur das Wort anfügen:

aList.append(word) 

Beachten Sie, dass die list = Teil und fallen gelassen werden sollte. .append() gibt None immer zurück, da die Liste an Ort und Stelle geändert wird, und Sie nie list irgendwo anders in Ihrem Code verwenden.

Verwandte Themen