读取文件并存储在字典中

时间:2013-11-18 06:42:37

标签: python

我正在浏览字典,我真的不知道如何构建自己的字典。我在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'])}

帮助?

1 个答案:

答案 0 :(得分:2)

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

{...}表示法你在这里使用的符号对应于python中的集合。因此,当您确实需要列表时,实际上是在创建一个集合。你可以用这个

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

defaultdictdict的子类。所以你可以像dict一样使用它。