2012-03-06 3 views
0

Использование Python Я пытаюсь проанализировать файл с разделителями табуляции. Я открываю файл и импорт в виде списка словарей здесь:Python - Список словарей; accessing issue

import csv 
fileIN = open('transaction_tmp', "r") 
list_of_dicts = list(csv.DictReader(fileIN, dialect='excel-tab')) 

мне нужно посчитать (и обратите внимание на строку) для определенного столбца этого файла. Я создаю пустой словарь:

dict_card = {} 

А теперь я пытаюсь перебирать список словарей, и если значение не отмечено, я отмечаю его (в качестве ключа) и значения, заданного в строке найдено (в списке словарей). Если он уже был добавлен, я просто добавить строку найдено:

for x in list_of_dicts: 
    if dict_card.has_key(x["CARD_NUMBER"]): 
     dict_card[x["CARD_NUMBER"]].append(x) 
    else: 
     dict_card[x["CARD_NUMBER"]] = x 

Этот последний бит кода дает мне ошибку:

Traceback (most recent call last): 
    File "<stdin>", line 3, in ? 
AttributeError: 'dict' object has no attribute 'append' 

У меня возникают проблемы, определяя местонахождение моей ошибки. Будучи новичком в Python, я не совсем уверен, правильно ли я получаю доступ к list_of_dicts.

ответ

1

Это вызвано тем, что вы назначаете только x значение dict, а не [x], список содержит только x. Вы не можете добавить что-то типа x, только списки. Чтобы исправить, измените dict_card[x["CARD_NUMBER"]] = x на dict_card[x["CARD_NUMBER"]] = [x]. В качестве альтернативы просто используйте

for x in list_of_dicts: 
    dict_card.setdefault(x['CARD_NUMBER'], []).append(x) 
+0

Это сделало трюк - спасибо! – zvxr

Смежные вопросы