2.9. Dictionaries¶
En dictionary är en avbildning från nycklar till värden. Varje nyckel slås upp direkt; dictionaryn kommer ihåg vilket värde som senast kopplades till den nyckeln.
2.9.1. Skapa dictionaries¶
Använd klammerparenteser med par av key: value, eller konstruktorn 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
Värden kan vara av vilka typer som helst – strängar, tal, listor, till och med andra dictionaries:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
Varje nyckel i en dictionary avbildas på exakt ett värde.¶
2.9.2. Åtkomst och medlemskap¶
Indexering med [] hämtar värdet för en nyckel. En saknad nyckel utlöser KeyError:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
För en mer förlåtande uppslagning, använd dict.get(). Den returnerar None för en saknad nyckel, eller ett värde som du skickar med som andra argument:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
Nyckelordet in testar medlemskap för nyckeln – inte för värdet:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. Lägga till, uppdatera och ta bort¶
Att tilldela d[key] lägger till posten om nyckeln är ny och skriver över den om den redan finns:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
Borttagning kan göras på några olika sätt:
del d[key]– tar bort en post; utlöserKeyErrorom nyckeln saknas.dict.pop()– tar bort och returnerar värdet; ett valfritt standardvärde låter dig undvika undantaget.dict.clear()– tar bort alla poster.
dict.update() slår samman en annan dictionary (eller en lista med par av (key, value)) in i mottagaren och skriver över eventuella matchande nycklar:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. Iterering¶
Att iterera en dictionary direkt ger dess nycklar, i den ordning de infogades:
for k in person:
print(k)
Tre vyer ger explicit åtkomst:
dict.keys()– nycklarna (samma som att iterera dictionaryn).dict.values()– värdena.dict.items()– tupler av(key, value), perfekta att packa upp i en loop.
for key, value in person.items():
print(key, "=", value)
2.9.5. Vad som kan vara en nyckel¶
Nycklar i en dictionary måste vara hashbara – deras värde kan inte ändras under sin livstid. Vanliga hashbara typer är:
Muterbara typer som list, dict och bytearray kan inte vara nycklar; att använda en sådan utlöser TypeError. Tupler av oföränderliga värden är det vanliga sättet att indexera en dictionary med en sammansatt identifierare, såsom en 2D-rutnätskoordinat:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. Längd¶
len() returnerar antalet poster:
>>> len(person)
4