无法使用Python从列表中删除重复项

2024-05-29 02:06:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件,我想编辑,所以我读文件和复制列表中的内容。列表包含重复项。所以我做了:

csv_in = list(set(csv_in))

但我得到:

不可修复列表错误

with open(source_initial2, 'r', encoding='ISO-8859-1') as file_in, open(source_initial3, 'w', encoding='ISO-8859-1',newline='') as file_out:
  csv_in = csv.reader(file_in, delimiter=',')
  csv_out = csv.writer(file_out, delimiter=';')
  csv_in = list(set(csv_in))


for row in csv_in:

    for i in range(len(row)):
        if "/" in row[i]:
            row[i] = row[i].replace('/', '')

        if "\"" in row[i]:
            row[i] = row[i].replace('\"', '')
        if "Yes" in row[i]:
            row[i] = row[i].replace('Yes', '1')
        if "No" in row[i]:
            row[i] = row[i].replace('No', '0')
        if myrowlen > 5:
            break
    print(row)    
    csv_out.writerow(row)

清单是这样的

[['DCA.p/C.05820','5707119001793','p/C钢系列表面。。。QcK MINI,,'5,4','Yes'],['DCA.P/C.05820','570711901793','P/C钢系列SUR。。。QcK MINI“,”5,4“,”是“]…[”DCA.P/C.05820“,”570711901793“,”P/C钢系列SUR。。。QcK MINI,'5,4','是']]

为什么我会这样,我该怎么解决呢? 谢谢


Tags: 文件csvin列表ifoutreplacelist
2条回答

csv.reader包含行,其中从csv文件读取的每一行作为字符串列表返回。你知道吗

虽然set对象要求其项是不可变的数据类型(因此^{hashable),但list类型不是其中之一。你知道吗

test_reader = [[0,1,2], [3,4,5]]
print(set(test_reader))  # throws TypeError: unhashable type: 'list'

# after casting to tuple type
test_reader = [(0,1,2), (3,4,5)]
print(set(test_reader))   # {(0, 1, 2), (3, 4, 5)}

问题是csv_in是一个列表列表,而list不是可哈希的数据类型。为了解决这个问题,您可以执行以下操作:

csv_in = list(set([tuple(row) for row in csv_in]))

或者如果您需要它作为列表列表:

csv_in = [list(element) for element in set([tuple(row) for row in csv_in])]

相关问题 更多 >

    热门问题