2011-10-25 122 views
0

我是新來的Python刪除重複鍵,和我目前這個問題難住了:從字典列表

我產生csv.DictReader詞典列表。我已創建的列表與功能如下:

def csvToDictList(filename): 
    reader = csv.DictReader(open(filename, 'rb')) 

    list = [] 
    for row in reader: 
     list.append(row) 

    return (list, reader.fieldnames) 

這個工作很大,但我處理CSV文件有重複列,所以我最終像一本字典:

[ 
{'Column1': 'Value1', 'Column2': 'Value2', ... <some unique columns and values> ..., 'Column1': 'Value1', 'Column2': 'Value2'}, 
... 
{'Column1': 'Value1N', 'Column2': 'Value2N', ... <some unique columns and values> ..., 'Column1': 'Value1N', 'Column2': 'Value2N'} 
] 

我主要問題是如何刪除此字典列表中的重複列?

我想過遍歷每個鍵,然後除去列時我發現一個重複的鍵名像這樣的東西:

def removeColumn(dictList, colName): 
    for row in dictList: 
     del row[colName] 

但是,不就是刪除兩列?我應該使用字典的散列鍵嗎?任何幫助表示讚賞!

編輯:我看到的副本實際上出現在reader.fieldnames列表中。所以,我假設字典也包含這些列,這是一個不正確的假設。

+5

Python詞典沒有重複鍵 - 隨後寫入鍵會吹走之前存在的內容。你的某行的未編輯內容是什麼? – Nate

回答

2

字典中沒有重複鍵。

如果你有更多的同名字段,DictReader將只取最後一個(覆蓋前面的那個)。

對於以下CSV文件:

a,b,c,a,b 
1,2,3,4,5 
6,7,8,9,10 

的DictReader將返回下列類型的字典:

{'a': '4', 'c': '3', 'b': '5'} 
{'a': '9', 'c': '8', 'b': '10'} 

從而引發先前值ab列了。

+0

謝謝!我正在看reader.fieldnames,重複的東西仍然存在,但沒有在數據中。我嘗試了你的小測試,果然重複的結果已經消失了,這就是我所關心的。 – mevatron