Удалить дубликаты ключей из списка словаря - PullRequest
0 голосов
/ 25 октября 2011

Я новичок в 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. Итак, я предполагал, что словари также содержат эти столбцы, что было неверным предположением.

1 Ответ

2 голосов
/ 25 октября 2011

Нет ничего похожего на дубликаты ключей в словаре.

Если у вас есть больше столбцов с тем же именем, 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'}

, отбрасывая, таким образом, предыдущие значения для столбцов a и b.

...