面试题答案
一键面试def calculate_averages_and_check_duplicates(class_grades):
course_scores = {}
student_sets = {}
for class_name, students in class_grades.items():
for student, scores in students.items():
score_set = set()
for course, score in scores.items():
if course == 'extra_courses':
for extra_course, extra_score in scores['extra_courses'].items():
score_set.add(extra_score)
if extra_course not in course_scores:
course_scores[extra_course] = []
course_scores[extra_course].append(extra_score)
else:
score_set.add(score)
if course not in course_scores:
course_scores[course] = []
course_scores[course].append(score)
student_sets[student] = score_set
average_scores = {course: sum(scores)/len(scores) for course, scores in course_scores.items()}
duplicate_students = []
for student1, set1 in student_sets.items():
for student2, set2 in student_sets.items():
if student1 != student2 and set1 == set2:
if student1 not in duplicate_students:
duplicate_students.append(student1)
if student2 not in duplicate_students:
duplicate_students.append(student2)
return average_scores, duplicate_students
class_grades = {
'class1': {
'student1': {'math': 85, 'english': 90, 'physics': 88, 'extra_courses': {'coding': 95, 'painting': 80}},
'student2': {'math': 78, 'english': 82, 'physics': 75, 'extra_courses': {'coding': 88, 'painting': 85}}
},
'class2': {
'student3': {'math': 92, 'english': 88, 'physics': 90, 'extra_courses': {'coding': 90, 'painting': 82}}
}
}
averages, duplicates = calculate_averages_and_check_duplicates(class_grades)
print("课程平均成绩:", averages)
print("成绩集合相同的学生:", duplicates)
上述代码中,calculate_averages_and_check_duplicates
函数实现了以下功能:
- 遍历嵌套字典,计算每个课程(包括普通课程和额外课程)所有学生成绩的平均值,并将结果保存在
average_scores
字典中。 - 将每个学生的所有课程成绩放入一个集合中,检查是否有学生的成绩集合完全相同,如果有,将这些学生的名字保存在
duplicate_students
列表中。 - 最后返回课程平均成绩字典和成绩集合相同的学生列表。