所以这是我现在的密码
def course_rolls(records):
"""Returns course code as a key and then the
student id as the value of the key"""
course_roll_dict = {}
for (course, student) in records:
course_code = course[0]
student_id = student[0]
course_roll_dict.update({course_code:{student_id}})
我的输出是
{'ENG002': {2721815},
'FCOM02': {2113869},
'ECO001': {2721815},
'MTH001': {2923516},
'ENG001': {2113869},
'PHY001': {2949099},
'GEL001': {2113869},
'INF001': {2286481},
'FCOM03': {2923516}}
但这不是我想要的,我需要的
{'ECO001': {2923516, 2721815},
'ENG002': {2721815},
'FCOM03': {2923516},
'GEL001': {2113869},
'FCOM02': {2113869},
'PHY001': {2949099},
'ENG001': {2923516, 2113869},
'MTH001': {2923516},
'INF001': {2286481}}
我只是不知道如何给一个键2个值,因为有两个相同的键,但两个不同的值(或学生ID的你可以说)。我支持循环浏览文本文件。如果我打印出课程代码和学号,我会得到:
ENG002 2721815
FCOM02 2113869
ECO001 2923516
MTH001 2923516
ECO001 2721815
ENG001 2923516
PHY001 2949099
GEL001 2113869
INF001 2286481
ENG001 2113869
FCOM03 2923516
字典有你需要的确切功能-它是
setdefault
。将代码的最后一行更改为:course_roll_dict.setdefault(course_code, set()).add(student_id)
下面是这行奇怪的代码的作用。
setdefault
尝试在字典中查找键course_code
。如果键不在那里,它会将键添加到字典中,并使用第二个参数(一个空集)作为值,该值同时返回。如果键在那里,它只返回值。无论哪种情况,返回值都是迄今为止处理的学生的集合。然后你就把新学生加进去。你知道吗您还可以查看标准库中的类
defaultdict
。你知道吗看起来您正在使用
update
,而您应该使用add
:这就是你所拥有的:
这就是你想要的:
您还可以使用来自
itertools
模块的groupby
来解决您的问题,如以下示例:输出:
相关问题 更多 >
编程相关推荐