使用计数器功能时发生回溯错误

时间:2017-01-10 10:59:24

标签: python

我想做以下事情:

  1. 读入文本文件。
  2. 逐行检查以查看单词是否与标签列表中的单词匹配。
  3. 创建列表的频率计数
  4. 因此我有以下内容:

    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)
    

    一切正常,直到计数部分。当我这样做时,我抛出以下错误。对这里出了什么问题的想法?

    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'
    

1 个答案:

答案 0 :(得分:1)

您正在计算列表list = aList.append([word]) 中的每个元素本身都是一个列表,其中包含一个单词:

[word]

您正在将Counter附加到列表中,因此列表中包含一个元素。

aList.append(word) 尝试将每个列表用作键,这是不可能的,因为列表对象是可变的,因此不可清除。

你不想计算列表,你想要计算单词,所以只附加没有周围列表的单词:

list =

请注意.append()部分可以而且应该被删除。 None始终返回list,因为列表已就地更改,并且您永远不会在代码中的任何其他地方使用 PumpCycleTime = millis(); // Loop this until the pumpHIGH duration has expired do { digitalWrite(Pump, HIGH); SendSerialData(); } while (millis() - PumpCycleTime < PumpHIGH); // Record the pump cycle LOW start time PumpCycleTime = millis(); // Loop this until the pumpLOW duration has expired do { digitalWrite(Pump, LOW); SendSerialData(); } while (millis() - PumpCycleTime < 1);