簡體   English   中英

無法使用Python從列表中刪除重復項

[英]Cannot remove duplicates from a list using 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 STEELSERIES SUR ... QcK MINI','5,4','是'],['DCA.P / C.05820' ,“ 5707119001793”,“ P / C鋼系列... QcK MINI”,“ 5,4”,“是”] ..... ['DCA.P / C.05820','5707119001793','P / C STEELSERIES SUR ... QcK MINI','5,4','Yes']]

為什么得到這個,如何解決呢? 謝謝

您遇到的問題是csv_in是列表的列表,而列表不是可哈希的數據類型。 為了解決該問題,您可以執行以下操作:

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])]

csv.reader包含行,其中從csv文件讀取的每一行都作為字符串列表返回。

雖然set object要求其項目為不可變數據類型(從而是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)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM