2.9. Sanakirjat¶
Sanakirja on kuvaus avaimista arvoihin. Jokainen avain haetaan suoraan; sanakirja muistaa, mikä arvo oli viimeksi liitetty kyseiseen avaimeen.
2.9.1. Sanakirjojen luominen¶
Käytä aaltosulkeita ja key: value -pareja tai dict -konstruktoria:
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
Arvot voivat olla mitä tahansa tyyppejä – merkkijonoja, lukuja, listoja, jopa toisia sanakirjoja:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
Jokainen sanakirjan avain kuvautuu täsmälleen yhteen arvoon.¶
2.9.2. Käyttö ja kuuluvuus¶
Indeksointi [] -merkinnällä hakee avaimen arvon. Puuttuva avain nostaa KeyError -poikkeuksen:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
Anteeksiantavaan hakuun käytä dict.get(). Se palauttaa None puuttuvalle avaimelle tai toisena argumenttina antamasi arvon:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
Avainsana in testaa avaimen kuuluvuutta – ei arvon:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Lisääminen, päivittäminen ja poistaminen¶
Sijoitus muotoon d[key] lisää merkinnän, jos avain on uusi, ja korvaa sen, jos se on jo olemassa:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
Poistamiseen on muutamia muotoja:
del d[key]– poistaa merkinnän; nostaaKeyError-poikkeuksen, jos avain puuttuu.dict.pop()– poistaa ja palauttaa arvon; valinnainen oletusarvo auttaa välttämään poikkeuksen.dict.clear()– poistaa jokaisen merkinnän.
dict.update() yhdistää toisen sanakirjan (tai listan (key, value) -pareja) vastaanottajaan ja korvaa kaikki täsmäävät avaimet:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Iterointi¶
Sanakirjan iterointi suoraan tuottaa sen avaimet lisäysjärjestyksessä:
for k in person:
print(k)
Kolme näkymää antavat eksplisiittisen pääsyn:
dict.keys()– avaimet (sama kuin sanakirjan iterointi).dict.values()– arvot.dict.items()–(key, value)-monikot, jotka sopivat täydellisesti purkamiseen silmukassa.
for key, value in person.items():
print(key, "=", value)
2.9.5. Mikä voi olla avain¶
Sanakirjan avainten on oltava hajautettavia (hashable) – niiden arvo ei voi muuttua elinaikansa kuluessa. Yleisiä hajautettavia tyyppejä ovat:
Muuttuvat tyypit kuten list, dict ja bytearray eivät voi olla avaimia; sellaisen käyttäminen nostaa TypeError -poikkeuksen. Muuttumattomien arvojen monikot ovat tavallinen tapa avaintaa sanakirja yhdistetyllä tunnisteella, kuten 2-ulotteisella ruudukon koordinaatilla:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Pituus¶
len() palauttaa merkintöjen määrän:
>>> len(person)
4