Home » Articole » Articole » Calculatoare » Programare » Python » Limbajul de programare Python: Dicționare

Limbajul de programare Python: Dicționare

postat în: Python 0

Acest capitol este despre dicționare. Dicționarele au chei și valori. Cheile sunt folosite pentru a găsi valorile. Iată un exemplu de dicționar utilizat:

def print_menu():
    print('1. Print Phone Numbers')
    print('2. Add a Phone Number')
    print('3. Remove a Phone Number')
    print('4. Lookup a Phone Number')
    print('5. Quit')
    print()

numbers = {}
menu_choice = 0
print_menu()
while menu_choice != 5:
    menu_choice = int(input("Type in a number (1-5): "))
    if menu_choice == 1:
        print("Telephone Numbers:")
        for x in numbers.keys():
            print("Name: ", x, "\tNumber:", numbers[x])
        print()
    elif menu_choice == 2:
        print("Add Name and Number")
        name = input("Name: ")
        phone = input("Number: ")
        numbers[name] = phone
    elif menu_choice == 3:
        print("Remove Name and Number")
        name = input("Name: ")
        if name in numbers:
            del numbers[name]
        else:
            print(name, "was not found")
    elif menu_choice == 4:
        print("Lookup Number")
        name = input("Name: ")
        if name in numbers:
            print("The number is", numbers[name])
        else:
            print(name, "was not found")
    elif menu_choice != 5:
        print_menu()

Și iată ieșirea mea:

1. Print Phone Numbers
2. Add a Phone Number
3. Remove a Phone Number
4. Lookup a Phone Number
5. Quit

Type in a number (1-5): 2
Add Name and Number
Name: Joe
Number: 545-4464
Type in a number (1-5): 2
Add Name and Number
Name: Jill
Number: 979-4654
Type in a number (1-5): 2
Add Name and Number
Name: Fred
Number: 132-9874
Type in a number (1-5): 1
Telephone Numbers:
Name: Jill     Number: 979-4654
Name: Joe      Number: 545-4464
Name: Fred     Number: 132-9874

Type in a number (1-5): 4
Lookup Number
Name: Joe
The number is 545-4464
Type in a number (1-5): 3
Remove Name and Number
Name: Fred
Type in a number (1-5): 1
Telephone Numbers:
Name: Jill     Number: 979-4654
Name: Joe      Number: 545-4464

Type in a number (1-5): 5

Acest program este similar cu lista de nume de mai devreme în capitolul despre liste. Iată cum funcționează programul. Mai întâi este definită funcția print_menu. print_menu doar tipărește un meniu care este folosit ulterior de două ori în program. Urmează liniile amuzante numbers = {}. Tot ceea ce face această linie este să îi spună lui Python că numbers este un dicționar. Următoarele linii doar fac meniul să funcționeze. Liniile

for x in numbers.keys():
    print("Name:", x, "\tNumber:", numbers[x])

parcurg dicționarul și tipăresc toate informațiile. Funcția
numbers.keys()
returnează o listă care este apoi folosită de bucla
for
. Lista returnată de keys() nu este într-o anumită ordine, așa că dacă o doriți în ordine alfabetică, trebuie sortată. Similar listelor, declarația numbers[x] este folosită pentru a accesa un anumit membru al dicționarului. Desigur, în acest caz x este un șir. În continuare, linia numbers[name] = phone adaugă un nume și un număr de telefon în dicționar. Dacă name ar fi fost deja în dicționar, phone ar înlocui orice era acolo înainte. În continuare liniile

if name in numbers:
    del numbers[name]

văd dacă un nume este în dicționar și îl șterge dacă este. Operatorul
name in numbers
returnează adevărat dacă name este în
numbers
, dar în caz contrar returnează fals. Linia del
numbers[name]
elimină numele cheii și valoarea asociată acelei chei. Liniile

if name in numbers:
    print("The number is", numbers[name])

verifică dacă dicționarul are o anumită cheie și dacă imprimă numărul asociat acesteia. În cele din urmă, dacă alegerea meniului este invalidă, meniul este retipărit pentru plăcerea dvs. de vizionare.

O recapitulare: Dicționarele au chei și valori. Cheile pot fi șiruri sau numere. Cheile indică valori. Valorile pot fi orice tip de variabilă (inclusiv liste sau chiar dicționare (acele dicționare sau liste, desigur, pot conține dicționare sau liste ele însele (înfricoșător, nu? 🙂 ))). Iată un exemplu de utilizare a unei liste într-un dicționar:

max_points = [25, 25, 50, 25, 100]
assignments = ['hw ch 1', 'hw ch 2', 'quiz   ', 'hw ch 3', 'test']
students = {'#Max': max_points}

def print_menu():
    print("1. Add student")
    print("2. Remove student")
    print("3. Print grades")
    print("4. Record grade")
    print("5. Print Menu")
    print("6. Exit")

def print_all_grades():
    print('\t', end=' ')
    for i in range(len(assignments)):
        print(assignments[i], '\t', end=' ')
    print()
    keys = list(students.keys())
    keys.sort()
    for x in keys:
        print(x, '\t', end=' ')
        grades = students[x]
        print_grades(grades)

def print_grades(grades):
    for i in range(len(grades)):
        print(grades[i], '\t', end=' ')
    print()

print_menu()
menu_choice = 0
while menu_choice != 6:
    print()
    menu_choice = int(input("Menu Choice (1-6): "))
    if menu_choice == 1:
        name = input("Student to add: ")
        students[name] = [0] * len(max_points)
    elif menu_choice == 2:
        name = input("Student to remove: ")
        if name in students:
            del students[name]
        else:
            print("Student:", name, "not found")
    elif menu_choice == 3:
        print_all_grades()
    elif menu_choice == 4:
        print("Record Grade")
        name = input("Student: ")
        if name in students:
            grades = students[name]
            print("Type in the number of the grade to record")
            print("Type a 0 (zero) to exit")
            for i in range(len(assignments)):
                print(i + 1, assignments[i], '\t', end=' ')
            print()
            print_grades(grades)
            which = 1234
            while which != -1:
                which = int(input("Change which Grade: "))
                which -= 1    #same as which = which - 1
                if 0 <= which < len(grades):
                    grade = int(input("Grade: "))
                    grades[which] = grade
                elif which != -1:
                    print("Invalid Grade Number")
        else:
            print("Student not found")
    elif menu_choice != 6:
        print_menu()

și iată un exemplu de ieșire:

1. Add student
2. Remove student
3. Print grades
4. Record grade
5. Print Menu
6. Exit

Menu Choice (1-6): 3
       hw ch 1         hw ch 2         quiz            hw ch 3         test 
#Max    25              25              50              25              100 

Menu Choice (1-6): 5
1. Add student
2. Remove student
3. Print grades
4. Record grade
5. Print Menu
6. Exit

Menu Choice (1-6): 1
Student to add: Bill

Menu Choice (1-6): 4
Record Grade
Student: Bill
Type in the number of the grade to record
Type a 0 (zero) to exit
1   hw ch 1     2   hw ch 2     3   quiz        4   hw ch 3     5   test 
0               0               0               0               0 
Change which Grade: 1
Grade: 25
Change which Grade: 2
Grade: 24
Change which Grade: 3
Grade: 45
Change which Grade: 4
Grade: 23
Change which Grade: 5
Grade: 95
Change which Grade: 0

Menu Choice (1-6): 3
       hw ch 1         hw ch 2         quiz            hw ch 3         test 
#Max    25              25              50              25              100
Bill    25              24              45              23              95 

Menu Choice (1-6): 6

Iată cum funcționează programul. Practic, variabila students este un dicționar cu cheile fiind numele elevilor și valorile fiind notele lor. Primele două linii doar creează două liste. Următoarea linie students =
{'#Max': max_points}
creează un nou dicționar cu key {#Max} și valoarea este setată să fie [25, 25, 50, 25, 100] (deoarece asta era max_points când se face atribuirea) (folosesc tasta #Max deoarece # este sortat înaintea oricăror caractere alfabetice). În continuare este definit print_menu. În continuare, funcția
print_all_grades
este definită în liniile:

def print_all_grades():
    print('\t',end=" ")
    for i in range(len(assignments)):
        print(assignments[i], '\t',end=" ")
    print()
    keys = list(students.keys())
    keys.sort()
    for x in keys:
        print(x, '\t',end=' ')
        grades = students[x]
        print_grades(grades)

Observați cum sunt scoase mai întâi cheile din dicționarul students cu funcția keys din linia keys = list(students.keys()). keys este un iterabil și este convertit în listă, astfel încât toate funcțiile pentru liste să poată fi utilizate pe ea. Apoi cheile sunt sortate în linia keys.sort(). for este folosit pentru a trece prin toate cheile. Notele sunt stocate ca o listă în dicționar, astfel încât grades = students[x] oferă grades lista care este stocată la tasta x. Funcția print_grades doar tipărește o listă și este definită câteva rânduri mai târziu.

Liniile ulterioare ale programului implementează diferitele opțiuni ale meniului. Linia students[name] = [0] * len(max_points adaugă un student la cheia numelui lor. Notația [0] * len(max_points) creează doar o listă de 0-uri care are aceeași lungime ca lista max_points.

Intrarea de îndepărtare a studentului șterge doar un student similar cu exemplul de agendă telefonică. Alegerea înregistrării notelor este puțin mai complexă. Notele sunt preluate în linia grades = students[name] primește o referință la notele numelui studentului,name. O notă este apoi înregistrată în rândul grades[which] = grade. Este posibil să observați că grades nu sunt niciodată reintroduse în dicționarul studenților (ca în no students[name] = grades). Motivul pentru afirmația lipsă este că grades sunt de fapt un alt nume pentru students[name] și, prin urmare, schimbarea grades schimbă student[name].

Dicționarele oferă o modalitate ușoară de a lega cheile la valori. Aceasta poate fi folosită pentru a urmări cu ușurință datele care sunt atașate la diferite chei.

(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)

Lucrul cu baze de date
Lucrul cu baze de date

Descoperă puterea bazelor de date cu acest ghid complet.

Nu a fost votat 19.11 lei38.26 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Business intelligence și analitica în afaceri
Business intelligence și analitica în afaceri

Esențială pentru profesioniștii și studenții pasionați de transformarea datelor brute în informații valoroase.

Nu a fost votat 23.89 lei52.63 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Căutarea, extragerea, organizarea și evaluarea informațiilor
Căutarea, extragerea, organizarea și evaluarea informațiilor

Transformă informația în putere cu ajutorul acestei cărți indispensabile!

Nu a fost votat 19.11 lei46.02 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *