TypeError:无法散列的“列表”

萨旺

我正在构建一个程序,用于比较列表中的每个促销代码(可能包含ocr错误)与另一个列表(正确的促销代码列表)中的所有促销代码

预期的输出是编辑距离,而促销代码与要比较的促销代码之间的编辑距离最小。

我的密码

import csv
from nltk.metrics import distance

with open("all_correct_promo.csv","rb") as file1:
    reader1 = csv.reader(file1)
    correctPromoList = list(reader1)
    #print correctPromoList

with open("all_extracted_promo.csv","rb") as file2:
    reader2 = csv.reader(file2)
    extractedPromoList = list(reader2)
    #print extractedPromoList

def find_min_edit(str_,list_):
    nearest_correct_promos = []
    distances = {}
    min_dist = 100 # arbitrary large assignment
    for correct_promo in list_:
        dist = distance.edit_distance(extracted,correct_promo,True) # compute Levenshtein distance
        distances[correct_promo] = dist # store each score for real promo codes
        if dist<min_dist:
            min_dist = dist # store min distance
    # extract all real promo codes with minimum Levenshtein distance
    nearest_correct_promos.append(','.join([i[0] for i in distances.items() if i[1]==min_dist])) 
    return ','.join(nearest_correct_promos) # return a comma separated string of nearest real promo codes

incorrectPromo = {}
count = 0
for extracted in extractedPromoList:
    print 'Computing %dth promo code...' % count
    incorrectPromo[extracted] =  find_min_edit(extracted,correctPromoList) # get comma separated str of real promo codes nearest to extracted
    count+=1
print incorrectPromo

预期产量

Computing 0th promo code...
Computing 1th promo code...
Computing 2th promo code...
{'abc': 'abc', 'abd': 'abx,aba,abz,abc', 'acd': 'abx,aba,abz,abc'}

但是,我的代码显示以下错误

Computing 0th promo code...

Traceback (most recent call last):

  File "correctpromo_test4.py", line 31, in <module>

    incorrectPromo[extracted] =  find_min_edit(extracted,correctPromoList) # get 
comma separated str of real promo codes nearest to extracted

 File "correctpromo_test4.py", line 20, in find_min_edit

    distances[correct_promo] = dist # store each score for real promo codes

TypeError: unhashable type: 'list'
Vivek Kalyanarangan

您正在将CSV读取为列表列表-函数find_min_edit()期望将字符串列表作为第二个参数;您传递的是一个字符串列表列表。

通过整理这些内容来更改您读取csv文件的方式-

代替

with open("all_correct_promo.csv","rb") as file1:
    reader1 = csv.reader(file1)
    correctPromoList = list(reader1)

只是用这个

with open("all_correct_promo.csv","rb") as file1:
    reader1 = csv.reader(file1)
    correctPromoList = [''.join(i) for i in reader1]
    print correctPromoList

对两个CSV都执行此操作,这样就可以整理出来...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python:TypeError:无法散列的类型:“列表”

TypeError:无法散列的类型:'numpy.ndarray'

如何克服TypeError:无法散列的类型:“列表”

如何修复TypeError:无法散列的类型:“列表”错误

TypeError:无法散列的类型

Scrapy(python)TypeError:无法散列的类型:“列表”

Python TypeError:无法散列的类型:'dict'

无法删除TypeError:无法散列的类型:“ numpy.ndarray”

Django:无法散列的类型:“列表”错误

TypeError:无法散列的类型:'list'如何将图像以相同顺序放入列表中?

熊猫:TypeError:无法散列的类型:“列表”

tensorflow TypeError:无法散列的类型:'numpy.ndarray'

TypeError:无法散列的类型:调用.iloc()时的“列表”

熊猫列的列表理解结果:无法散列的类型:“ dict”

TypeError:无法散列的类型:'slice'pandas DataFrame列

TypeError:无法散列的类型:找到产品的成分时为“列表”

如何修复'TypeError:无法散列的类型:'list'错误?

TypeError:不可散列的类型:Python象棋程序中的“列表”

TypeError:无法散列的类型:Google Cloud Storage init中的“列表”

Python快取:TypeError:无法散列的类型:'dict'

计算列表差异时,如何避免出现“ TypeError:无法散列的类型:'dict'”?

eval抛出“ TypeError:无法散列的类型:'numpy.ndarray'”

Django:无法散列的类型:“列表”

Python3:TypeError:无法散列的类型:使用计数器时的“列表”

无法散列的类型列表python

TypeError:无法散列的类型:python中的“列表”

Python列表操作错误:无法散列的类型“列表”

无法散列的类型:“列表”错误

转换 Dataframe 列以解决 TypeError 无法散列