python csv类型错误:不可损坏类型:';列表';

python csv类型错误:不可损坏类型:';列表';,python,csv,syntax,syntax-error,Python,Csv,Syntax,Syntax Error,嗨,我正在尝试比较两个csv文件,并得到差异。但是我得到了上面提到的错误。有人能帮忙吗。谢谢 import csv f = open('ted.csv','r') psv_f = csv.reader(f) attendees1 = [] for row in psv_f: attendees1.append(row) f.close f = open('ted2.csv','r') psv_f = csv.reader(f) attendees2 = [] for row in psv_

嗨,我正在尝试比较两个csv文件,并得到差异。但是我得到了上面提到的错误。有人能帮忙吗。谢谢

import csv

f = open('ted.csv','r')
psv_f = csv.reader(f)
attendees1 = []
for row in psv_f:
attendees1.append(row)

f.close

f = open('ted2.csv','r')
psv_f = csv.reader(f)
attendees2 = []
for row in psv_f:
    attendees2.append(row)


f.close

attendees11 = set(attendees1)
attendees12 = set(attendees2)

print (attendees12.difference(attendees11))

当你们迭代csv阅读器时,你们会得到列表,所以当你们这样做的时候

for row in psv_f:
    attendees2.append(row)
行实际上是一个列表实例。因此,Attendes1/Attendes2是一个列表列表。

当您将其转换为set()时,需要确保没有任何项出现超过一次,并且set()依赖于列表中项的哈希函数。所以您会遇到错误,因为当您转换为set()时,它会尝试对列表进行散列,但列表不可散列

如果执行以下操作,您将得到相同的异常:

set([1, 2, [1,2] ])
更多集合:

发生在线路上

attendees11 = set(attendees1)
不是吗?您正试图从列表列表中创建一个集合,但这是不可能的,因为集合可能只包含可哈希类型,而列表不包含。您可以将列表转换为元组

attendees1.append(tuple(row))

导致您创建列表的原因:

attendees1.append(row)
诸如此类:

attendees2.append(row)
然后,当您这样做时:

attendees11 = set(attendees1)
错误将被抛出

你应该做的是:

attendees2.append(tuple(row))

你能提供完整的回溯吗?嗯,不太了解你需要的关于完整回溯的信息,看看是哪一行导致了问题。谢谢,这一行的attendes11=set(attendes1)thanks一般来说,完整的回溯是值得的,因为它们通常都很简洁,并且有多条关于错误的有用信息!谢谢。@MichalK如果它帮助你解决了你的问题,请毫不犹豫地接受它:)