2011-10-25 19 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には、以下のdictsを返します。

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

は、このように離れてabの列の以前の値を投げます。

+0

ありがとう!私は読者を見ていました。フィールドネームは、そこにまだ存在していましたが、データには存在しませんでした。私はあなたの小さなテストを試して、そして確かに重複がなくなった、それは私が気にするすべてです。 – mevatron