简体   繁体   中英

Search within a dictionary with a lot of values in python

In the following code I'm showing a function that lets you add students to a dictionary (book) with rut being the key, the issue I have is that I'm trying to make a function that can search by department and then print all students of that are part of that department, basically I'm asking how do you search a dictionary with 1 key that is associated to a lot of values and you want to search for a particular value and then print all keys that have it along with their info?

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():
    for rut in book:
        student = book[rut]
        print(student['rut'], student['name'], student['age'], student['department'])


def main():
    count = 0
    x = 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 = ''
        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 = "Mathematics"
                x = 1
            elif num_dept == 4:
                department = "TI"
                x = 1
            else:
                print('Error')
        x = 0
        add(rut, name, age, department)
        count = count + 1
    printall()


main()

You can use a list comprehension .

students = [student for student in book.values() 
            if student["department"] == desired_department]

This will give you a list, which you can then print out if you so choose.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM