你好,我试图比较两个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 reader时你会得到列表,所以当你做
for row in psv_f:
attendees2.append(row)
Row实际上是一个列表实例。所以attendees1/attendees2是一个列表的列表
当你将它转换为set()时,它需要确保没有项目出现超过一次,set()依赖于列表中项目的哈希函数。所以你会得到错误,因为当你转换到set()时,它试图散列一个列表,但列表不可散列。
如果你这样做,你会得到同样的异常:
set([1, 2, [1,2] ])
发生在这一行
attendees11 = set(attendees1)
不是吗?你试图从列表的列表中创建一个集合,但这是不可能的,因为set可能只包含哈希类型,而列表不是。您可以将列表转换为元组。
attendees1.append(tuple(row))
导致您创建list of list:
attendees1.append(row)
像明智的:
attendees2.append(row)
当你这样做的时候:
attendees11 = set(attendees1)
错误将被抛出
你应该做的是:
attendees2.append(tuple(row))