python csv 类型错误:不可哈希类型:'list'



你好,我试图比较两个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))

最新更新