我有一本描述学生课程的字典: 键是名称(字符串),值是课程列表(字符串)
students_dict={"name1":["math","computer science", "statistics"],"name2":["algebra","statistics","physics"],"name3":["statistics","math","programming"]}
我想创建一个函数来获取这个词汇表并返回一个新的词汇表: 关键是课程(字符串) 这些值将是参加这门课程的学生名单
course_students={"statistics":["name1","name2","name3"],"algebra":["name2"],"programming":["name3"],"computer science":["name1"],"physics":["name2"],"math":["name1","name3"]}
顺序无关紧要。你知道吗
编辑:这正是我想做的
def swap_student_courses(students_dict):
students_in_each_cours={}
cours_list=[...]
cours_names=[]
for cours in cours_list:
if students_dict.has_key(cours)==True:
cours_names.append(...)
students_in_each_cours.append(cours_names)
return students_in_each_cours
这可以通过一个集合理解(首先得到一组唯一的课程名称)然后一个dict理解(将课程名称与一个学生列表相关联,该学生的课程出现在他们各自的列表中)来完成:
你尝试的方法忽略了搜索每个学生的课程列表:你使用了
students_dict.has_key(cours)
忘记了学生的名字,而不是课程,是students_dict
的关键。你知道吗下面是您可以使用的简单函数。你知道吗
python标准dict和defaultdict之间的唯一区别是,如果您尝试访问标准dict中不存在的键,它将导致
KeyError
,而在defaultdict中,它将该键的默认值设置为创建该dict时传递的任何内容。在本例中,它是空列表。你知道吗不带defaultdict的实现
编辑
标准dict中的KeyError正在增加,因为如果这是我们第一次尝试访问某个键,
'math'
例如,它不在字典中。Here是很好的词典解释。你知道吗值重复不是问题,因为在这种情况下,我们只需将新的student追加到列表中。你知道吗
为了简单起见,我会在这里使用
defaultdict
,但要知道,使用常规的dict也可以做到这一点:相关问题 更多 >
编程相关推荐