You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:47:06