2011-10-25 5 views
0

내가 파이썬에 새로운 오전 중복 키를 제거하고 나는 현재이 문제로 난처한 상황에 빠진 오전 :은 사전 목록

나는 사전의 목록 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

파이썬 사전에는 중복 키가 없습니다. 키에 대한 후속 쓰기는 이전에 있던 내용을 날려 버릴 수 있습니다. 행 중 편집되지 않은 내용은 무엇입니까? – 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