2013-11-18 3 views
0

im переходящие словари, и я действительно не понимаю, как построить свой собственный. У меня есть следующие данные в файле CSVЧтение файла и сохранение в словаре

fp = CpE, CSE 2315 
    CpE, CSE 2320 
    CpE, CSE 2441 
    CpE, CSE 3320 
    CpE, CSE 3442 
    CpE, EE 2440 
    CpE, MATH 1426 
    CS, CSE 2315 
    CS, CSE 2320 
    CS, CSE 3320 
    CS, CSE 4303 
    CS, CSE 4305 
    CS, CSE 4308 
    CS, MATH 1426 
    SE, CSE 2315 
    SE, CSE 2320 
    SE, CSE 3311 
    SE, CSE 3320 
    SE, CSE 4321 
    SE, CSE 4322 
    SE, CSE 4361 
    SE, MATH 1426 

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

{'Cpe' : ['CSE 2315', 'CSE 2320', 'CSE 2441'.........], 
'CS' : ['CSE 2315', 'CSE 2320'....................], 

вот что я написал, чтобы попытаться сделать это, но им возникли проблемы

majors = { } 
    for line in fp : 
     degree, course = line.strip().split(',') ##split the componets of each line 
     if degree in majors :    # if degree is already in dictionary,add class 
      majors[degree] = {course} 
     else :        #if degree is not in dictionary add degree and class 
      majors[degree] = {degree,course} 
    return majors 

но когда я напечатать я получить

{'CS': set(['MATH 1426']), 'CpE': set(['MATH 1426']), 'SE': set(['MATH 1426'])} 

help?

ответ

2
majors[degree] = {course} 
... 
majors[degree] = {degree,course} 

{...} обозначение того, что вы использовали здесь соответствует множествам в питоне. Таким образом, вы фактически создаете набор, когда вам действительно нужен список. Вы можете использовать этот

majors = {} 
for line in fp : 
    degree, course = line.strip().split(',') 
    majors.setdefault(degree, []).append(course) 
return majors 

Вы можете использовать defaultdict для создания списков, соответствующие клавишам, как этот

from collections import defaultdict 
majors = defaultdict(list) 
for line in fp : 
    degree, course = line.strip().split(',') 
    majors[degree].append(course) 
return majors 

defaultdict подкласс dict. Таким образом, вы можете использовать его как dict.

+0

@NPE Спасибо :) Я добавил 'defaultdict'. – thefourtheye

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