2.9. Szótárak¶
A szótár (dictionary) kulcsokat értékekhez rendelő leképezés. Minden kulcsot közvetlenül lehet kikeresni; a szótár megjegyzi, hogy az adott kulcshoz utoljára milyen érték tartozott.
2.9.1. Szótárak létrehozása¶
Használj kapcsos zárójeleket key: value párokkal, vagy a dict konstruktort:
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
Az értékek bármilyen típusúak lehetnek – karakterláncok, számok, listák, sőt akár további szótárak is:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
A szótár minden kulcsa pontosan egy értékhez van rendelve.¶
2.9.2. Hozzáférés és tagság¶
A [] operátorral történő indexelés visszaadja egy kulcshoz tartozó értéket. A hiányzó kulcs KeyError kivételt vált ki:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
Engedékenyebb kikereséshez használd a dict.get() metódust. Hiányzó kulcs esetén None értéket ad vissza, vagy egy második argumentumként átadott értéket:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
Az in kulcsszó a kulcs tagságát vizsgálja – nem az értékét:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Hozzáadás, frissítés és eltávolítás¶
A d[key] kifejezésnek való értékadás új bejegyzést ad hozzá, ha a kulcs új, és felülírja azt, ha már létezik:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
Az eltávolításnak több formája van:
del d[key]– eltávolít egy bejegyzést;KeyErrorkivételt vált ki, ha a kulcs hiányzik.dict.pop()– eltávolítja és visszaadja az értéket; egy opcionális alapértelmezés segítségével elkerülhető a kivétel.dict.clear()– eltávolít minden bejegyzést.
A dict.update() egy másik szótárt (vagy (key, value) párok listáját) egyesít a fogadóval, felülírva minden egyező kulcsot:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Iterálás¶
A szótár közvetlen iterálása a kulcsait adja vissza, beszúrási sorrendben:
for k in person:
print(k)
Három nézet biztosít kifejezett hozzáférést:
dict.keys()– a kulcsok (megegyezik a szótár iterálásával).dict.values()– az értékek.dict.items()–(key, value)tuple-ök, amelyek tökéletesen kicsomagolhatók egy ciklusban.
for key, value in person.items():
print(key, "=", value)
2.9.5. Mi lehet kulcs¶
A szótár kulcsainak hashelhetőnek kell lenniük – az értékük nem változhat meg az élettartamuk során. A gyakori hashelhető típusok a következők:
A változtatható típusok, mint a list, a dict és a bytearray nem lehetnek kulcsok; ilyen használata TypeError kivételt vált ki. A megváltoztathatatlan értékekből álló tuple-ök a szokásos módja annak, hogy egy szótárt összetett azonosító – például egy 2D rácskoordináta – alapján kulcsoljunk:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Hossz¶
A len() a bejegyzések számát adja vissza:
>>> len(person)
4