gpt4 book ai didi

python - 类型错误 : unhashable type: 'list' by converting list to set

转载 作者:行者123 更新时间:2023-11-28 20:04:03 25 4
gpt4 key购买 nike

我有一个来自 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))

我怎样才能做到这一点(也许以更优化/更快的方式)?

最佳答案

每个 sor 都是一个 csv 行 - 行“单元格”值的列表,rr 成为一个列表列表。列表不能是集合的项目,因为列表是 not hashable

res1 另一方面是一个字符串值列表。字符串是可哈希的。


这是一个演示差异的示例:

>>> l1 = [["1", "2", "3"]]
>>> l2 = ["1", "2", "3"]
>>>
>>> set(l1)
Traceback (most recent call last):
File "<input>", line 1, in <module>
set(l1)
TypeError: unhashable type: 'list'
>>> set(l2)
set(['1', '3', '2'])

关于python - 类型错误 : unhashable type: 'list' by converting list to set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38103527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com