MST

星途 面试题库

面试题:Python嵌套字典与集合在复杂数据处理中的应用

给定一个嵌套字典,代表一个班级学生的成绩情况,结构如下: ```python 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}} } } ``` 请编写一个函数,接受这个嵌套字典作为参数,返回一个字典,其中键为课程名称(包括普通课程和额外课程),值为该课程所有学生成绩的平均值,并且要考虑到有些学生可能没有参加某些额外课程。同时,将每个学生的所有课程成绩(普通课程和额外课程)放入一个集合中,检查是否有学生的成绩集合完全相同,如果有,返回这些学生的名字。
32.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
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函数实现了以下功能:

  1. 遍历嵌套字典,计算每个课程(包括普通课程和额外课程)所有学生成绩的平均值,并将结果保存在average_scores字典中。
  2. 将每个学生的所有课程成绩放入一个集合中,检查是否有学生的成绩集合完全相同,如果有,将这些学生的名字保存在duplicate_students列表中。
  3. 最后返回课程平均成绩字典和成绩集合相同的学生列表。