2.9. Dicționare¶
Un dicționar este o mapare de la chei la valori. Fiecare cheie este căutată direct; dicționarul reține ce valoare a fost asociată ultima dată cu acea cheie.
2.9.1. Crearea dicționarelor¶
Folosește acolade cu perechi key: value sau constructorul dict:
empty = {}
person = {"name": "OpenMV", "id": 42}
counts = dict(a=1, b=2, c=3) # keyword form
pairs = dict([("x", 1), ("y", 2)]) # from a list of pairs
Valorile pot fi de orice tip – șiruri, numere, liste, chiar și alte dicționare:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
Fiecare cheie dintr-un dicționar se mapează la exact o valoare.¶
2.9.2. Acces și apartenență¶
Indexarea cu [] recuperează valoarea pentru o cheie. O cheie lipsă declanșează KeyError:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
Pentru o căutare îngăduitoare, folosește dict.get(). Aceasta returnează None pentru o cheie lipsă sau o valoare pe care o transmiți ca al doilea argument:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
Cuvântul-cheie in testează apartenența unei chei – nu a unei valori:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Adăugare, actualizare și eliminare¶
Atribuirea către d[key] adaugă intrarea dacă cheia este nouă și o suprascrie dacă există deja:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
Eliminarea are câteva forme:
del d[key]– elimină o intrare; declanșeazăKeyErrordacă cheia lipsește.dict.pop()– elimină și returnează valoarea; o valoare implicită opțională îți permite să eviți excepția.dict.clear()– elimină fiecare intrare.
dict.update() îmbină un alt dicționar (sau o listă de perechi (key, value)) în receptor, suprascriind orice chei care se potrivesc:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Iterare¶
Iterarea directă a unui dicționar produce cheile sale, în ordinea inserării:
for k in person:
print(k)
Trei vizualizări oferă acces explicit:
dict.keys()– cheile (la fel ca iterarea dicționarului).dict.values()– valorile.dict.items()– tupluri(key, value), perfecte pentru despachetare într-o buclă.
for key, value in person.items():
print(key, "=", value)
2.9.5. Ce poate fi o cheie¶
Cheile unui dicționar trebuie să fie hashable – valoarea lor nu se poate schimba pe durata existenței. Tipurile hashable comune sunt:
tuple(când fiecare element din interior este la rândul său hashable)
Tipurile mutabile precum list, dict și bytearray nu pot fi chei; utilizarea uneia declanșează TypeError. Tuplurile de valori imuabile sunt modul standard de a indexa un dicționar după un identificator compus, cum ar fi o coordonată de grilă 2-D:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Lungime¶
len() returnează numărul de intrări:
>>> len(person)
4