Python 文件读取与词典构建

Python 文件读取与词典构建,python,Python,我试图读取一个以逗号分隔的文件,并将其转换为字典,以使其以以下格式结束 {'CpE' : CSE 2315,'CpE' : 'CSE 2320'. 'CpE' : 'CSE 2441'..........,'CS' : CSE 2315, 'CS' : CSE 2320} 所以我要做的就是将每一行存储在字典中,度是键,类是值 正在读取的文件不正确 CpE,CSE 2315 CpE,CSE 2320 CpE,CSE 2441 CpE,CSE 3320 CpE,CSE 3442 CpE,EE 24

我试图读取一个以逗号分隔的文件,并将其转换为字典,以使其以以下格式结束

{'CpE' : CSE 2315,'CpE' : 'CSE 2320'. 'CpE' : 'CSE 2441'..........,'CS' : CSE 2315, 'CS' : CSE 2320}
所以我要做的就是将每一行存储在字典中,度是键,类是值

正在读取的文件不正确

CpE,CSE 2315
CpE,CSE 2320
CpE,CSE 2441
CpE,CSE 3320
CpE,CSE 3442
CpE,EE 2440
CpE,MATH 1426
CS,SE 2315
CS,CSE 2320
CS,CSE 3320
CS,CSE 4303
CS,CSE 4305
CS,CSE 4308
CS,MATH 1426
我写的代码试图做到这一点是。。。fp是一个文件

majors = {}
    for line in fp :
        (degree, course) = line.strip().split(',')
        majors[degree] = course
    print majors
我得到的是

{'CS': 'MATH 1426', 'CpE': 'MATH 1426'}

它似乎只抓取每个度/键的最后一个值。为什么?

这是因为您将其分配给同一个键。您需要为字典中的每个值使用一个唯一的键。

这是因为您要将其分配给同一个键。您需要为字典中的每个值使用唯一的键。

字典仅将单个值映射到每个键。您应该在这里将课程列表映射到每个键。

字典仅将单个值映射到每个键。您应该在这里将课程列表映射到每个键。

一个键只能映射到字典中的一个值。因此,您会不断覆盖每个专业的单一课程

如果您想制作一个字典,将每个学位映射到课程的
列表
,您可以使用集合的
defaultdict
轻松完成此操作:

>>> from collections import defaultdict
>>> majors = defaultdict(list)
>>> fp = open("file.txt")
>>> for line in fp:
...     (degree, course) = line.strip().split(',')
...     majors[degree].append( course )
... 
>>> majors
defaultdict(<type 'list'>, {'CS': ['SE 2315', 'CSE 2320', 'CSE 3320', 'CSE 4303',
                                   'CSE 4305', 'CSE 4308', 'MATH 1426'],
                            'CpE': ['CSE 2315', 'CSE 2320', 'CSE 2441', 'CSE 3320',
                                    'CSE 3442', 'EE 2440', 'MATH 1426']
                           })
>>从集合导入defaultdict
>>>专业=默认DICT(列表)
>>>fp=打开(“file.txt”)
>>>对于fp中的行:
...     (学位,课程)=line.strip().split(',')
...     专业[学位].附加(课程)
... 
>>>主修
defaultdict(,{'CS':['SE 2315','CSE 2320','CSE 3320','CSE 4303',',
“CSE 4305”、“CSE 4308”、“数学1426”],
‘CpE’:[‘CSE 2315’、‘CSE 2320’、‘CSE 2441’、‘CSE 3320’,
“CSE 3442”、“EE 2440”、“数学1426”]
})

一个键只能映射到字典中的一个值。因此,您会不断覆盖每个专业的单一课程

如果您想制作一个字典,将每个学位映射到课程的
列表
,您可以使用集合的
defaultdict
轻松完成此操作:

>>> from collections import defaultdict
>>> majors = defaultdict(list)
>>> fp = open("file.txt")
>>> for line in fp:
...     (degree, course) = line.strip().split(',')
...     majors[degree].append( course )
... 
>>> majors
defaultdict(<type 'list'>, {'CS': ['SE 2315', 'CSE 2320', 'CSE 3320', 'CSE 4303',
                                   'CSE 4305', 'CSE 4308', 'MATH 1426'],
                            'CpE': ['CSE 2315', 'CSE 2320', 'CSE 2441', 'CSE 3320',
                                    'CSE 3442', 'EE 2440', 'MATH 1426']
                           })
>>从集合导入defaultdict
>>>专业=默认DICT(列表)
>>>fp=打开(“file.txt”)
>>>对于fp中的行:
...     (学位,课程)=line.strip().split(',')
...     专业[学位].附加(课程)
... 
>>>主修
defaultdict(,{'CS':['SE 2315','CSE 2320','CSE 3320','CSE 4303',',
“CSE 4305”、“CSE 4308”、“数学1426”],
‘CpE’:[‘CSE 2315’、‘CSE 2320’、‘CSE 2441’、‘CSE 3320’,
“CSE 3442”、“EE 2440”、“数学1426”]
})

字典中的键是唯一的。。。那么,您是在(CS+MATH)->1426之后,还是在CS之后,是数学1426、SE 2315等的列表……字典中的键是唯一的。。。那么,您是在(CS+MATH)->1426之后,还是在CS之后,是一个数学1426、SE 2315等的列表……您也可以使用内置dict来完成此操作。您也可以使用内置dict来完成此操作。