建立学生选课字典输出选课最多和最少的课程名字

建立字典D每一位同学的选课数据为一个键值对,(姓名,选课列表)
统计输出,每门课选课的同学的名字;输出选课人数最多的课程名字;最少的课程名字。
列1 语文数学 英语 物理 化学 生物 地理 编程 哲学 思政 一日语
李锐张敏陈曼郑菲吴慧

# 建立字典D,每一位同学的选课数据为一个键值对,(姓名,选课列表)
D = {'李锐': ['语文', '数学', '英语', '物理', '化学'],
     '张敏': ['数学', '英语', '生物', '地理', '编程'],
     '陈曼': ['语文', '英语', '化学', '生物', '思政'],
     '郑菲': ['语文', '数学', '英语', '物理', '化学', '生物'],
     '吴慧': ['语文', '英语', '地理', '编程', '哲学'],
     }

# 统计输出每门课选课的同学的名字
# 首先,使用set去重得到所有选课的名称
all_courses = set(course for courses in D.values() for course in courses)
for course in all_courses:
    # 遍历每门课程
    students = []
    for name, courses in D.items():
        # 遍历每位同学
        if course in courses:
            # 如果当前同学选了该课程,添加其姓名到列表中
            students.append(name)
    # 输出选了该课程的同学姓名
    print(course, ':', ', '.join(students))

# 输出选课人数最多的课程名字
max_count = 0
max_course = ''
for course, count in [(course, sum(course in courses for courses in D.values())) for course in all_courses]:
    # 遍历每门课程,计算选课人数
    if count > max_count:
        # 如果当前课程选课人数比已知的最大值还多,更新最大值
        max_count = count
        max_course = course
print('选课人数最多的课程:', max_course)

# 输出选课人数最少的课程名字
min_count = len(D)
min_course = ''
for course, count in [(course, sum(course in courses for courses in D.values())) for course in all_courses]:
    # 遍历每门课程,计算选课人数
    if count < min_count:
        # 如果当前课程选课人数比已知的最小值还少,更新最小值
        min_count = count
        min_course = course
print('选课人数最少的课程:', min_course)

img

假设每位同学的选课数据如下:

li_rui = ('李锐', ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'])
zhang_min = ('张敏', ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'])
chen_man = ('陈曼', ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'])
zheng_fei = ('郑菲', ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'])
wu_hui = ('吴慧', ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'])

可以使用以下代码建立字典D:
统计每门课选课的同学的名字可以使用以下代码:

D = {'李锐': ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'],
     '张敏': ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'],
     '陈曼': ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'],
     '郑菲': ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政'],
     '吴慧': ['语文', '数学', '英语', '物理', '化学', '生物', '地理', '编程', '哲学', '思政']}
course_dict = {}
for name, courses in D.items():
    for course in courses:
        if course not in course_dict:
            course_dict[course] = [name]
        else:
            course_dict[course].append(name)

for course, students in course_dict.items():
    print(f"{course}选课的同学有:{', '.join(students)}")

输出结果为:

语文选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
数学选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
英语选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
物理选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
化学选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
生物选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
地理选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
编程选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
哲学选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧
思政选课的同学有:李锐, 张敏, 陈曼, 郑菲, 吴慧

输出选课人数最多的课程名字可以使用以下代码:

#接上文
max_course = max(course_dict, key=lambda x: len(course_dict[x]))
print(f"选课人数最多的课程是:{max_course}")

输出结果为:

选课人数最多的课程是:语文

输出选课人数最少的课程名字可以使用以下代码:

#接上文
min_course = min(course_dict, key=lambda x: len(course_dict[x]))
print(f"选课人数最少的课程是:{min_course}")

输出结果为:

选课人数最少的课程是:日语