- Dictionare in Python
- Crearea unui dictionar
- Accesarea elementelor unui dictionar
- Adaugarea si actualizarea elementelor unui dictionar
- Stergerea dictionarelor si eliminarea elementelor
- Parcurgerea elementelor unui dictionar
- Metode predefinite pentru dictionare
- Functii predefinite pentru dictionare
- Python Dictionary Comprehension
Dictionare in Python
In limbajul Python, dictionarele reprezinta structuri de date care stocheaza perechi de tipul cheie-valoare, unde cheile sunt unice. Declararea dictionarelor se realizeaza prin intermediul acoladelor. Elementele unui dictionar pot fi modificate, motiv pentru care spunem ca dictionarele sunt structuri de date de tip mutabil.
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> orase[2] = 'Sofia' >>> orase {1: 'Timisoara', 2: 'Sofia', 3: 'Budapesta', 4; 'New York'}
Un dictionar poate include elemente ale caror valori sunt tot structuri de tip dictionar. Cheile de la nivelul unui dictionar nu pot fi definite insa decat prin intermediul tipurilor de date de tip imutabil, precum sirurile de caractere, valorile numerice sau tuplurile.
>>> orase_ro = {1: 'Timisoara', 2: 'Bucuresti', 3: 'Iasi'} >>> orase_uk = {1: 'Londra', 2: 'Glasgow', 3: 'Liverpool'} >>> orase = {'ro': orase_ro, 'uk': orase_uk} >>> orase {'ro': {1: 'Timisoara', 2: 'Bucuresti', 3: 'Iasi'}, 'uk': {1: 'Londra', 2: 'Glasgow', 3: 'Liverpool'}} >>> orase['ro'][1] 'Timisoara'
>>> dictionar = {1: 'A', (1, 2): 1, 3.14: {1: 1, 2: 2}, 'C': (1, 3)} >>> dictionar {1: 'A', (1, 2): 1, 3.14: {1: 1, 2: 2}, 'C': (1, 3)}
Putem verifica daca o cheie, o valoare sau o pereche de tip cheie-valoare sunt sau nu prezente printre cheile, valorile sau perechile de tip cheie-valoare ale unui dictionar folosind operatorii in, respectiv not in.
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> orase {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> 1 in orase True
>>> 1 in orase.keys() True
>>> 'Timisoara' in orase.values() True
>>> (2, 'Londra') in orase.items() True
Crearea unui dictionar
Crearea unei structuri de date de tip dictionar se realizeaza prin precizarea perechilor de tip cheie-valoare (elemente) intre acolade. Despartirea elementelor de la nivelul dictionarului se face prin virgula. Elementele de la nivelul unui dictionar nu trebuie sa detina acelasi tip de date.
>>> a1 = {1: 'Timisoara', 3.14: 0, 'a': 'Ioana', (1, 2): 1024} >>> type(a1) <class 'dict'>
>>> a2 = dict({1: 'Timisoara', 2: 'Sofia', 3: 'Budapesta'}) >>> type(a2) <class 'dict'>
Crearea unui dictionar se poate face si prin intermediul constructorului dict(). In cazul in care nu sunt precizate perechile de tip cheie-valoare, se creeaza un dictionar gol.
>>> empty1 = dict() >>> empty1 {}
>>> empty2 = {} >>> empty2 {}
De asemenea, constructorul dict() permite si conversia unor structuri compatibile catre structuri de tip dictionar.
>>> d1 = dict(([1, 2], [2, 4], [3, 6])) >>> type(d1) <class 'dict'> >>> d1 {1: 2, 2: 4, 3: 6}
>>> d2 = dict([(1, 2), (2, 4), (4,6)]) >>> type(d2) <class 'dict'> >>> d2 {1: 2, 2: 4, 4: 6}
>>> d3 = dict(a = 2, b = 4, c = 6) >>> type(d3) <class 'dict'> >>> d3 {'a': 2, 'b': 4, 'c': 6}
Accesarea elementelor unui dictionar
Accesarea valorilor de la nivelul perechilor de tip cheie-valoare (elementelor) se face prin precizarea cheii, intre paranteze drepte, dupa numele dictionarului.
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> orase[3] 'Budapesta'
Daca se precizeaza pentru cheie o valoare care nu este prezenta la nivelul dictionarului, atunci va fi generata o exceptie de tipul KeyError.
>>> orase[5] Traceback (most recent call last): File "", line 1, in KeyError: 5
Accesarea valorilor corespunzatoare unor chei se poate realiza si prin intermediul metodei predefinite get(). De exemplu, pentru obtinerea valorii corespunzatoare cheii 4 de la nivelul dictionarului orase trebuie precizata cheia ca si argument al metodei get().
>>> orase.get(4) 'New York'
Daca metoda get() primeste ca si argument o valoare care nu este prezenta la nivelul cheilor dictionarului, este returnata valoarea None. Pentru astfel de cazuri a fost introdusa posibilitatea precizarii unui al doilea argument pentru metoda get(), argument cu rol de valoare implicita returnata.
>>> orase.get(5) >>> print(orase.get(5)) None >>> orase.get(5, 0) 0
Adaugarea si actualizarea elementelor unui dictionar
Adaugarea unei perechi de tip cheie-valoare intr-un dictionar existent se realizeaza prin precizarea cheii dupa numele dictionarului si presupune pozitionarea noului element la finalul acestuia.
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> orase[5] = 'Sofia' >>> orase {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York', 5: 'Sofia'}
Daca cheia este prezenta la nivelul dictionarului, atunci se face actualizarea valorii corespunzatoare cheii.
>>> orase[1] = 'Praga' >>> orase {1: 'Praga', 2: 'Londra', 3: 'Budapesta', 4: 'New York', 5: 'Sofia'}
Stergerea dictionarelor si eliminarea elementelor
Pentru stergerea unui dictionar este necesara precizarea cuvantului cheie del inaintea numelui dictionarului ce urmeaza a fi sters.
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> del orase >>> orase Traceback (most recent call last): File "", line 1, in NameError: name 'orase' is not defined
In mod similar, poate fi realizata si stergerea unui singur element (pereche de tip cheie-valoare) din dictionar. De aceasta data cuvantul cheie del va fi precizat pentru cheia corespunzatoare elementului care urmeaza a fi sters.
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> del orase[1] >>> orase {2: 'Londra', 3: 'Budapesta', 4: 'New York'}
Stergerea tuturor elementelor unui dictionar poate fi obtinuta prin intermediul metodei predefinite clear().
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> orase.clear() >>> orase {}
Alte metode care au in vedere stergerea elementelor sunt: pop(), metoda care sterge perechea cheie-valoare pe baza valorii cheii specificata ca si argument, respectiv popitem(), metoda care permite stergerea unui element, returnandu-i valoarea in acelasi timp.
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> orase.pop(3) 'Budapesta' >>> orase.pop(3, None) >>> orase.pop(3) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 3
>>> orase.popitem() (4, 'New York')
Parcurgerea elementelor unui dictionar
Cheile de la nivelul unei structuri de date de tip dictionar pot fi parcurse prin intermediul unei iteratii for.
>>> for key in {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'}: ... print(key) ... 1 2 3 4
Daca se doreste parcurgerea prin intermediul aceleiasi iteratii, atat a cheilor, cat si a valorilor, este necesara utilizarea metodei predefinite items().
>>> for key, value in {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'}.items(): ... print(key, value) ... 1 Timisoara 2 Londra 3 Budapesta 4 New York
Metode predefinite pentru dictionare
Limbajul Python ofera metode predefinite ce pot fi referite de obiectele de tip dictionar. Acestea permit si obtinerea unui valori pe baza cheii, accesarea cheilor, valorilor si elementelor dictionarului sau stergerea elementelor dictionarului.
Metoda | Semnificatie |
---|---|
keys() | returneaza o lista care cuprinde cheile de la nivelul dictionarului |
values() | returneaza o lista care cuprinde valorile de la nivelul dictionarului |
items() | returneaza o lista care cuprinde perechile cheie-valoare |
get() | returneaza valoarea corespunzatoare cheii precizate ca si argument |
pop() | sterge elementul pe baza cheii specificate si il returneaza |
popitem() | sterge o pereche de tip cheie-valoare si o returneaza |
copy() | returneaza o copie a dictionarului |
clear() | sterge toate perechile cheie-valoare din dictionar |
update() | actualizeaza un dictionar cu elementele unui alt dictionar (argument) |
Metoda update() actualizeaza un dictionar cu elementele unui alt dictionar primit ca si argument. Daca sunt prezente chei duplicat la nivelul celor doua dictionare, se face actualizarea valorilor elementelor dictionarului care refera metoda.
>>> a1 = {1: 1, 2: 2, 3: 3} >>> a2 = {3: 3, 4: 4} >>> a1.update(a2) >>> a1 {1: 1, 2: 2, 3: 3, 4: 4}
>>> orase = {1: 'Timisoara', 2: 'Londra', 3: 'Budapesta', 4: 'New York'} >>> orase.keys() dict_keys([1, 2, 3, 4]) >>> orase.values() dict_values(['Timisoara', 'Londra', 'Budapesta', 'New York']) >>> orase.items() dict_items([(1, 'Timisoara'), (2, 'Londra'), (3, 'Budapesta'), (4, 'New York')])
Functii predefinite pentru dictionare
Structurile de date de tip dictionar beneficiaza de o serie de functii predefinite care permit, printre altele, determinarea numarului de perechi de tipul cheie-valoare sau a valorii maxime de la nivelul cheilor.
Metoda | Semnificatie |
---|---|
len() | numarul de elemente (perechi cheie-valoare) de la nivelul dictionarului |
max() | valoare maxima de la nivelul cheilor dictionarului |
min() | valoarea minima de la nivelul cheilor dictionarului |
sum() | suma valorilor cheilor de la nivelul dictionarului |
sorted() | returneaza o lista care contine cheile ordonate crescator |
any() | True daca cel putin o cheie de la nivelul dictionarului are valoarea True |
all() | True daca toate cheile de la nivelul dictionarului se evalueaza la True |
>>> numere = {12: 232, 4: 323, 11: 978, 7: 565} >>> len(numere) 4 >>> max(numere) 12 >>> min(numere) 4 >>> sum(numere) 34
Functia sorted returneaza o lista care contine cheile de la nivelul dictionarului ordonate crescator.
>>> sorted({12: 232, 4: 323, 11: 978, 7: 565}) [4, 7, 11, 12]
Functiile any() si all() returneaza True daca cel putin o cheie de la nivelul dictionarului are valoarea True, sau daca toate cheile de la nivelul dictionarului se evalueaza la True.
>>> any({0: 'A', '': 'B', 1: 'C'}) True >>> all({0: 'A', '': 'B', 1: 'C'}) False
Python Dictionary Comprehension
Termenul dictionary comprehension se refera la crearea unui dictionar nou dintr-o structura existenta pe baza unei expresii urmate de una sau mai multe instructiuni for si/sau if.
Daca se doreste crearea unui dictionar care contine patratul valorile de la nivelul unui alt dictionar, putem avea in vedere urmatorul script.
>>> numere = {'a': 1, 'b': 3, 'c': 5, 'd': 7} >>> numere2 = {} >>> for k, v in numere.items(): ... numere2[k] = v*v ... >>> numere2 {'a': 1, 'b': 9, 'c': 25, 'd': 49}
Secventa de cod precedenta poate fi rescrisa folosind dictionary comprehension, astfel:
>>> numere2 = {k:v*v for k, v in numere.items()} >>> numere2 {'a': 1, 'b': 9, 'c': 25, 'd': 49}