Python多值字典按值搜索:实现按部门查询学生信息
按部门查询学生信息的实现方案
嘿,我来帮你搞定这个按部门搜索学生的需求!咱们先理清楚核心逻辑:现有代码里的book字典是以rut为唯一键,每个值是包含学生完整信息的子字典,要实现按部门查询,本质就是遍历所有学生条目,筛选出部门字段匹配的记录,下面是具体的实现步骤:
1. 编写部门查询函数
咱们新增一个search_by_department函数,接收目标部门名称作为参数,遍历字典里的所有学生,匹配成功就打印信息,还可以加个无匹配时的友好提示:
def search_by_department(target_dept): print(f"\n--- 部门 {target_dept} 的学生信息 ---") found_students = False # 直接遍历字典的value(学生对象),比遍历键再取值更简洁 for student in book.values(): if student['department'] == target_dept: print(f"RUT: {student['rut']}, 姓名: {student['name']}, 年龄: {student['age']}, 部门: {student['department']}") found_students = True if not found_students: print(f"没有找到属于 {target_dept} 的学生哦")
2. 修复现有代码的小bug
注意到你原代码里的x变量是在main函数开头定义的,第一次选完部门后x会变成1,后续添加学生时会直接跳过部门选择的循环!得把x的定义放到每次添加学生的循环内部,确保每次新增学生都能重新选择部门:
def main(): count = 0 y = int(input("How many students will you add?: ")) while count < y: print('Input data of the student: ', count+1) rut = input("rut: ") name = input("name: ") age = int(input("age: ")) print("Department 1: RH, 2: Logistic, 3: Cleaners, 4: TI ") department = '' x = 0 # 把x移到这里,每次循环都重置为0 while x == 0: num_dept = int(input("department number: ")) if num_dept == 1: department = "RH" x = 1 elif num_dept == 2: department = "Logistic" x = 1 elif num_dept == 3: department = "Cleaners" # 这里原代码写的是Mathematics,和选项描述不一致,我修正了 x = 1 elif num_dept == 4: department = "TI" x = 1 else: print('Error, please enter a valid number (1-4)') x = 0 add(rut, name, age, department) count = count + 1 printall() # 新增查询交互,让用户输入要查询的部门 target_dept = input("\n请输入要查询的部门名称(如RH/Logistic):") search_by_department(target_dept)
3. 完整整合后的代码
把所有部分组合起来,完整可运行的代码如下:
book = {} def add(rut, name, age, department): student = {} student['rut'] = rut student['name'] = name student['age'] = age student['department'] = department book[rut] = student def printall(): print("\n--- 所有学生信息 ---") for rut in book: student = book[rut] print(student['rut'], student['name'], student['age'], student['department']) def search_by_department(target_dept): print(f"\n--- 部门 {target_dept} 的学生信息 ---") found_students = False for student in book.values(): if student['department'] == target_dept: print(f"RUT: {student['rut']}, 姓名: {student['name']}, 年龄: {student['age']}, 部门: {student['department']}") found_students = True if not found_students: print(f"没有找到属于 {target_dept} 的学生哦") def main(): count = 0 y = int(input("How many students will you add?: ")) while count < y: print('Input data of the student: ', count+1) rut = input("rut: ") name = input("name: ") age = int(input("age: ")) print("Department 1: RH, 2: Logistic, 3: Cleaners, 4: TI ") department = '' x = 0 while x == 0: num_dept = int(input("department number: ")) if num_dept == 1: department = "RH" x = 1 elif num_dept == 2: department = "Logistic" x = 1 elif num_dept == 3: department = "Cleaners" x = 1 elif num_dept == 4: department = "TI" x = 1 else: print('Error, please enter a valid number (1-4)') x = 0 add(rut, name, age, department) count = count + 1 printall() target_dept = input("\n请输入要查询的部门名称:") search_by_department(target_dept) main()
额外说明
- 用
book.values()遍历学生对象,比先遍历rut键再取值的写法更高效直观; - 加入了
found_students标记,避免无匹配结果时输出空内容,提升用户体验; - 修正了原代码中部门选项描述和实际赋值不一致的小问题。
内容的提问来源于stack exchange,提问作者Treyon Daren
相关产品推荐
相关产品推荐

