python统计词频,输出csv文件报错unhashable type

问题:代码报错了,原因似乎是某个“list”,是不是因为我不应该在 ngrams_in_sentence()函数后面,用for/if语句呢?
下面是源代码~
首先解释一下ngrams函数:这是一个用来输出三元搭配词组词频的函数,所谓“三元”,即三个三个词组合,譬如“我想去吃饭了”这句话,三元搭配就是:“我想去”、“想去吃”、“去吃饭”,以此类推。
计算词频就是,统计这个搭配出现了几次,如果 “我想吃” 这组搭配出现了5次,就会在它后面出现 5
以下代码处理的 词 一开始都在plk文件里面。

源代码:

def ngrams(dir_path):
    ss = corpus_CCL(dir_path) #这是引用另一个写好了的 用来打开plk文件的函数
    d={}
    for s in ss:
        gram = ngrams_in_sentences(s,3)  #这是引用让词语形成 三元搭配 的函数
        for col in gram:  #下面是计算词频
            if col in d:
                d[col] += 1
            else:
                d[col] = 1
    df = Series(d)    这是希望三元搭配词组和词频像表格那样 一列列展示出来,所以最后我会输出csv文件
    return df

报错: 这个 unhashable type 我怀疑是 unfishable type(不可分解),为啥会报错呢


Traceback (most recent call last):
  File "C:/Users/DELL/PycharmProjects/111/test/lesson10.py", line 46, in <module>
    df = ngrams(r'D:\Users\DELL\Desktop\testing')
  File "C:/Users/DELL/PycharmProjects/111/test/lesson10.py", line 39, in ngrams
    if col in d:
TypeError: unhashable type: 'list'

这个错误是由于尝试将一个不可哈希的类型(list)用作字典的键。可以将col从列表转换为元组,因为元组是可哈希的。改成这样试试:

def ngrams(dir_path):
    ss = corpus_CCL(dir_path)
    d = {}
    for s in ss:
        gram = ngrams_in_sentences(s, 3)  #这是引用让词语形成 三元搭配 的函数
        for col in gram:  #下面是计算词频
            key = tuple(col)
            if key in d:
                d[key] += 1
            else:
                d[key] = 1
    df = Series(d)
    return df