我有一个来自csv文件的代码列表:
file_path = 'c:\\temp\\list.csv'
csvfile = open(file_path, 'rb')
reader = csv.reader(csvfile, delimiter=';')
rr = []
for sor in reader:
if sor[1][0] == '1':
rr.append(sor)
print type(rr)
<type 'list'>
set (rr)
Traceback (most recent call last):
File "<pyshell#85>", line 1, in <module>
set (rr)
TypeError: unhashable type: 'list'
如果我对来自数据库的另一个列表执行相同的操作,则可以正常工作:
cur.execute('select code from mytable')
res = cur.fetchall()
res1 = []
res1.append(x[0] for x in res)
print type(res1)
<type 'list'>
set(res1)
set(['13561255', '11120088'])
由于rr和res1都是列表类型,它们之间的区别是什么?
实际上,我正在数据库中查找csv文件中不存在的记录
result = list(set(res1) - set(rr))
我怎样才能做到这一点(也许是以更优化/更快的方式)?
这是一个可能有用的片段。从文件中提取时,我使用了“extends”而不是“append”。它必须是与从文件导入相关的细微差别。
每个
sor
都是一个csv行-一个行“cell”值列表,rr
变成一个列表列表。列表不能是集合的项,因为列表是not hashable。res1
另一方面是字符串值的列表。字符串是散列的。下面是一个例子来说明这一区别:
相关问题 更多 >
编程相关推荐