将CSV文件转集合去重后转列表时报TypeError: unhashable type: 'list'如何解决
错误原因
set 要求存入的元素必须是可哈希的不可变类型,csv.reader 迭代返回的每一行内容是 list 类型,列表是可变对象,不支持哈希,所以直接把 reader 对象转 set 时会抛出该错误。
修复代码(整行去重)
将每一行的列表转为可哈希的元组后再存入set,去重后如果需要列表格式可以再转换回来:
import csv with open('f.csv', 'r', encoding='utf-8') as csv_file: reader = csv.reader(csv_file) # 行转元组后存入set去重 unique_items = set(tuple(row) for row in reader) # 按需转回列表格式 unique_list = [list(item) for item in unique_items] print(unique_list)
保留原文件行顺序的去重方案
如果你需要去重后仍然保持原文件的行出现顺序(Python 3.7+ 版本适用),可以用字典键唯一的特性实现,不需要转set:
import csv with open('f.csv', 'r', encoding='utf-8') as csv_file: reader = csv.reader(csv_file) unique_list = list({tuple(row): list(row) for row in reader}.values()) print(unique_list)
内容的提问来源于stack exchange,提问作者codewithawais
相关产品推荐
相关产品推荐

