2015-03-07 6 views
0

В настоящее время у меня есть файл csv, который содержит имя пользователя и их оценку на викторине (из 10). Файл CSV выглядит следующим образом:Группировка данных из файла csv в словаре

Ben,8 
Tim,9 
Tim,10 
Ben,10 
Ben,9 
Tim,7 

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

scores = {'Ben': [8, 10, 9], 'Tim': [9, 10, 7], etc...} 

Как я могу сгруппировать данные из файла CSV в словарь таким образом?

Я попытался найти ключ, например. «Бен» в словаре, но он возвращает только последний балл «Бен» в CSV-файле.

Большое спасибо.

+0

просто ищет ключа, например «Бен», однако он возвращает только самый последний счет – Tim

ответ

0

Вот пример:

sc_txt='''\ 
Ben,8 
Tim,9 
Tim,10 
Ben,10 
Ben,9 
Tim,7''' 

import csv 

scores={} 
for line in csv.reader(sc_txt.splitlines()): 
    scores.setdefault(line[0], []).append(line[1]) 

print scores 
# {'Tim': ['9', '10', '7'], 'Ben': ['8', '10', '9']} 

sc_txt.splitlines() Просто замените с открытым файловым объектом, и вы золотой.

+0

Спасибо ! - Это работает. – Tim

3

Посмотрите на следующий пример, используя defaultdict:

from collections import defaultdict 
d = defaultdict(list) 
with open('data.csv') as data: 
    for line in data: 
     name, score = line.strip("\n").split(',') 
     d[name].append(int(score)) 

print d 

Выход:

defaultdict(<type 'list'>, {'Tim': [9, 10, 7], 'Ben': [8, 10, 9]}) 
Смежные вопросы