Python este un limbaj popular pentru știința datelor. Iar lucrul cu colecțiile este una dintre cele mai fundamentale abilități pe care trebuie să le aveți.

Colecțiile sunt structuri de date care conțin elemente multiple din diferite tipuri de date.

Astăzi vom analiza în detaliu dicționarele, care sunt un tip special de colecție în Python. Vom acoperi funcționalitatea lor de bază, funcționarea lor interioară, precum și câteva caracteristici de ultimă generație ale celei mai recente versiuni Python.

La sfârșitul acestui tutorial, veți ști

  • Ce sunt dicționarele
  • Cum se lucrează cu dicționarele
  • Cum să iterați peste dicționare
  • Cum să copiați dicționarele
  • Cum se îmbină dicționarele în Python 3.9

Ce sunt dicționarele în Python?

Înainte de a afla despre ceva în profunzime, este întotdeauna bine să începeți cu o definiție simplă și de bază.

După cum am spus deja, dicționarele sunt un tip de colecție în Python. Cu toate acestea, spre deosebire de liste, tupluri și seturi, nu stocați valori individuale, ci așa-numitele perechi cheie-valoare. Aceasta înseamnă că, în loc să vă referiți la valorile dvs. printr-un index, utilizați o cheie, care este un identificator unic.

l1 = [10, "Hello", True, 20.23] # List
t1 = (10, "Hello", True, 20.23) # Tuple
s1 = {10, "Hello", True, 20.23} # Set

d1 = {'number': 10,
      'greeting': "Hello",
      'boolean': True,
      'float': 20.23} # Dictionary

În exemplul de mai sus, puteți vedea diferența. Perechile individuale cheie-valoare sunt separate prin virgule. Fiecare pereche începe cu o cheie unică urmată de două puncte și de valoarea respectivă. Observați că valoarea nu trebuie să fie unică, deoarece nu o folosim pentru a accesa sau identifica nimic.

Rețineți, de asemenea, că putem folosi orice tip de date pentru cheile și valorile dorite. Aici folosim doar șiruri pentru identificatori, dar putem folosi și numere întregi, flotante, colecții sau chiar booleeni.

Cu toate acestea, ar trebui să vă întrebați întotdeauna cât de rezonabil este acest lucru. De cele mai multe ori un șir va fi cea mai bună alegere.

Cum să lucrați cu dicționare în Python

Bine, acum că știm ce sunt dicționarele, să aruncăm o privire asupra modului de lucru cu ele.

În primul rând, vom parcurge operațiunile de bază, cum ar fi accesarea, adăugarea și eliminarea valorilor. După aceea, vom analiza câteva subiecte mai avansate și mai interesante.

Puteți accesa elementele unui dicționar în Python în același mod în care accesați elemente din orice altă colecție. Singura diferență este că treci mai degrabă o cheie decât un index. Acest lucru este valabil și pentru modificarea și chiar pentru adăugarea valorilor.

person = {'name': "Mike", 'age': 25, 'weight': 80.5}

print(person['name'])
person['name'] = "Bob" # Changing existing value
print(person['name'])

person['gender'] = 'm' # Creating new key-value pair
print(person['gender'])

După cum puteți vedea aici, trebuie doar să treceți o cheie pentru a accesa valoarea la care se referă. Mai întâi tipăriți numele, apoi îl schimbați. Apoi îl imprimați din nou pentru a vă asigura că modificările au fost făcute.

Observați că acest lucru nu funcționează doar pentru perechile deja existente, ci și pentru cele noi. Pentru a crea o nouă pereche cheie-valoare, trebuie doar să faceți referire la o cheie care nu există încă și să îi atribuiți o valoare. Perechea este apoi adăugată automat în dicționar.

Eliminarea valorilor dintr-un dicționar funcționează diferit. Aici puteți utiliza fișierul del cuvânt cheie sau pop () metodă.

Principala diferență dintre aceste două abordări este că del elimină doar perechea cheie-valoare, în timp ce pop () returnează și valoarea eliminată ulterior. În funcție de cazul dvs. de utilizare, va trebui să decideți ce metodă se potrivește mai bine sarcinii dvs.

Cum să iterez peste dicționare în Python

Deoarece dicționarele sunt colecții, puteți repeta și ele. Dar acest lucru nu este la fel de simplu și de simplu ca în cazul celorlalte tipuri de colecție.

Acest lucru se datorează faptului că nu aveți de-a face cu valori individuale, ci cu perechi. Când iterați peste un dicționar, utilizând o buclă for, de fapt iterați doar peste taste.

names_ages = {'Bob': 50,
              'Anna': 28,
              'Max': 30,
              'John': 76}

for element in names_ages:
    print(element)
    
# Output: Bob  Anna  Max  John

Prin urmare, dacă doriți să repetați valorile sau chiar perechile întregi, trebuie să utilizați metode suplimentare.

Pentru a accesa valorile, trebuie doar să apelați valori () metodă. Returnează un iterator pentru toate valorile dicționarului.

Pentru a accesa perechile complete, puteți apela articole () metodă. Aici iterați o listă de tupluri, unde fiecare tupl reprezintă o pereche cheie-valoare.

Desigur, există și chei () metoda, în cazul în care doriți să lucrați cu tastele de dicționar în afara unei bucle for.

print(list(names_ages.keys()))
print(list(names_ages.values()))
print(list(names_ages.items()))

# Output
# > ['Bob', 'Anna', 'Max', 'John']
# > [50, 28, 30, 76]
# > [('Bob', 50), ('Anna', 28), ('Max', 30), ('John', 76)]

Un lucru important de reținut aici este că aceste metode nu returnează liste reale. Acestea returnează obiecte, pe care le puteți folosi pentru a itera peste taste și valori. Dar puteți tipări cu ușurință acele obiecte în liste folosind listă() funcţie.

Cum să copiați dicționare în Python

Acum intrăm în câteva lucruri mai avansate.

Nu ai crede de câte ori programatorii noi și neexperimentați se confruntă cu probleme, deoarece copiază colecțiile într-un mod greșit. Ei își depanează proiectele ore în șir și nu reușesc să găsească problema.

Așadar, fii atent aici dacă nu vrei să experimentezi singură această frustrare.

Înainte de a vorbi despre copierea colecțiilor și dicționarelor, să ne uităm la modul în care ați copia de obicei tipuri de date primitive, cum ar fi numerele întregi.

i1 = 20
i2 = i1

i2 += 10
print(i1, i2)

# Output: 20  30

Când doriți să creați o nouă variabilă și să copiați valoarea unui alt număr întreg în ea, trebuie doar să atribuiți direct variabila. Apoi, puteți schimba valoarea celui de-al doilea număr întreg și puteți lucra cu acesta, fără a schimba nimic despre primul.

Acest lucru funcționează și pentru booleeni, flotoare, șiruri etc. Cu toate acestea, să vedem ce se întâmplă atunci când facem acest lucru cu un dicționar.

d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = d1
d2['c'] = 50

print(d1)
print(d2)

# Output
# {'a': 10, 'b': 20, 'c': 50}
# {'a': 10, 'b': 20, 'c': 50}

Ce s-a intamplat aici? Nu am făcut același lucru ca înainte? De ce se schimbă primul dicționar, când îl modificăm pe cel de-al doilea? Nu este doar o copie?

Răspunsul este un nu clar. Când atribuiți un dicționar unei noi variabile, treceți de fapt așa-numitul referinţă.

A doua variabilă nu este de fapt un dicționar, ci doar o altă variabilă care indică același dicționar ca prima. Prin urmare, nu contează ce variabilă aplicați modificări, deoarece toate sunt efectuate pe un dicționar la care se referă amândoi.

Dacă doriți să creați o copie reală superficială a unui dicționar în Python, trebuie să utilizați fișierul dict () funcția sau apelați copie() metoda dicționarului. Procedând astfel, creați un dicționar nou care are aceleași elemente ca originalul.

d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = dict(d1)
d3 = d1.copy()

d2['b'] = 50
d3['a'] = -90
print(d1) # unchanged

Observați, totuși, că obiectele din interiorul copiei sunt în continuare exact aceleași obiecte ca în primul dicționar. Prin urmare, dacă sunt obiecte sau colecții mai complexe, veți ajunge la un nou dicționar separat (dar obiectele din interiorul acestuia se vor referi la aceleași obiecte ca cele din primul dicționar).

Pentru a schimba acest lucru, ar trebui să faceți o așa-numită copie profundă, dar acest lucru nu intră în sfera acestui articol.

Cum să îmbinați dicționare în Python

Nu în ultimul rând, să vorbim despre funcțiile de dicționar de ultimă oră din Python 3.9. Aceste caracteristici sunt axate pe fuzionarea dicționarelor.

Până de curând, programatorii trebuiau fie să utilizeze Actualizați() metoda sau folosiți operatorii de despachetare.

d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = {'c': 40, 'd': 60, 'e': 20}
d1.update(d2)
print(d1)

d1 = {'a': 10, 'b': 20, 'c': 30}
d3 = {**d1, **d2}
print(d3)

Principala diferență dintre aceste două abordări este că Actualizați() metoda adaugă valorile unui dicționar la altul și aplică modificările direct. Dicționarul rezultat nu este returnat, ci de fapt salvat în primul obiect.

Pe de altă parte, când utilizați operatorii de despachetare, creați un dicționar nou și puneți în el perechile cheie-valoare ale celor două dicționare, despachetându-le.

Acum vă puteți întreba ce se întâmplă atunci când îmbinați două dicționare care au aceeași cheie în ele.

Vă puteți gândi la asta așa: primul dicționar creează perechea cheie-valoare, iar al doilea îl suprascrie. Deci, dacă apelați metoda de actualizare la prima colecție și treceți a doua colecție ca argument, perechea cheie-valoare a celui de-al doilea dicționar va ajunge în rezultat.

Același lucru este valabil și pentru despachetare. Orice dicționar pe care îl treceți ultimul îl suprascrie pe cele anterioare.

Deci acesta este vechiul mod de a face lucrurile. Cu toate acestea, în Python 3.9, au fost introduși operatorii de fuziune și actualizare. Fac simpla aderarea la dicționare.

d1 = {'a': 10, 'b': 20, 'c': 30}
d2 = {'c': 40, 'd': 60, 'e': 20}

d3 = d1 | d2  # Merging
d1 |= d2      # Updating

După cum puteți vedea, operatorul pentru fuzionare este același care este utilizat pentru operația SAU în biți. Ordinea dicționarelor este importantă dacă aveți chei identice în ambele dicționare. Colecția din dreapta suprascrie colecția din stânga.

Dacă doriți să actualizați primul dicționar în loc să întoarceți unul nou, pur și simplu combinați operatorul de fuziune cu operatorul de atribuire de bază. Acest mod de fuzionare a dicționarelor este metoda recomandată de la Python 3.9.

Dacă sunteți mai mult un student vizual sau auditiv, puteți urmări tutorialul meu video pe fuzionarea dicționarelor de mai jos.

Încheierea

Bine, deci ar trebui să fii acum foarte confortabil atunci când lucrezi cu dicționare. Nu știi doar ce sunt și cum să le folosești, dar înțelegi și cum funcționează la un nivel mai profund.

Când lucrați la un proiect, veți ști cum să copiați dicționarele în modul corect. Am acoperit chiar și una dintre caracteristicile de ultimă generație ale celei mai recente versiuni Python.

Asigurați-vă că parcurgeți din nou fragmentele de cod și înțelegeți cum și de ce funcționează. Acest lucru vă va face un programator Python mult mai bun.

Dacă sunteți interesat de mai mult conținut de acest gen, puteți consulta canalul meu YouTube NeuralNine sau site-ul meu web neuralnine.com.

Pentru pasionații de Python, am o serie specială de cărți Python care vă învață limba de la zero și, de asemenea, intră în subiecte mai avansate, cum ar fi învățarea automată și viziunea computerizată. Îl poți găsi aici.

Sper că v-a plăcut acest articol și vă doresc o zi minunată! 🙂