Kombinere dictionaries med dictionaries og lister

Akkurat som vi kan ha lister inni lister, kan vi ha dictionaries inni dictionaries. Eksempel 1 har en dictionary som heter agentbil, der verdiene til nøklene "motordata" og "dekkdata" er egne dictionaries.

Eksempel 1:

agentbil = {
    "eier": "James Bond",
    "merke": "Aston Martin",
    "motordata": {"effekt": 125, "slagvolum": 2.1, "dreiemoment": 225},
    "dekkdata": {"bredde": 155, "profil": 70, "felg": 12}
}

I Python Tutor ser det slik ut:

Illustrasjon av dictionary i dictionary

For å referere til en nøkkel i en dictionary inni en dictionary må vi bruke 2 indekser, én for hver dictionary. For eksempel agentbil["dekkdata"]["bredde"] for å finne dekkbredden til agentbil i eksempel 1.

Vi kan også ha dictionaries i lister. Eksempel 2 har ei liste som inneholder dictionaries som kopler postnummer og sted.

Eksempel 2:

postinfo = [
    {"nummer": 4225, "navn": "Lyngdal"},
    {"nummer": 4586, "navn": "Korshamn"},
    {"nummer": 4590, "navn": "Snartemo"},
    {"nummer": 4596, "navn": "Eiken"}
]

I Python Tutor ser det slik ut:

Illustrasjon av dictionary i liste

For å referere til en nøkkel i en dictionary inni ei liste, må vi bruke 2 indekser, én for lista og én for dictionary. For eksempel vil postinfo[1]["navn"] i eksempel 2 være "Korshamn" fordi element nummer 1 i postinfo inneholder en dictionary med nøkkel-verdi-paret "navn": "Korshamn".

Koden under vil gjennomløpe lista i eksempel 2 og skrive ut informasjon om postnummer og navn.

for sted in postinfo:
    print(f"{sted['navn']} har postnummer {sted['nummer']}.")

Vi kan også lister i dictionaries. Eksempel 3 inneholder en dictionary med forfattere som nøkler og lister med boktitler som verdier.

Eksempel 3:

katalog = {
    "Knut Hamsun": ["Sult", "Markens grøde", "Victoria"],
    "Ernest Hemingway": ["Og solen går sin gang", "Den gamle mannen og havet"],
    "Roald Dahl": ["Charlie og sjokoladefabrikken", "Heksene", "Matilda", "SVK"]
}

I Python Tutor ser det slik ut:

Illustrasjon av lister i dictionary

For å referere til et element i ei liste inni en dictionary, må vi bruke 2 indekser, én for dictionary og én for lista. For eksempel vil katalog["Roald Dahl"][1] i eksempel 3 være "Heksene" fordi element nummer 1 i lista knyttet til nøkkel "Roald Dahl", inneholder "Heksene".

Koden under vil gjennomløpe lista i eksempel 3 og skrive ut informasjon om forfattere og bøker.

for forfatter, titler in katalog.items():
    print(f"{forfatter} har skrevet:", end = " ")
    for tittel in titler:
        print(f"'{tittel}'", end = " ")
    print()

Det er ingen teoretisk grense for hvor mange dictionaries og lister vi kan nøste inni hverandre, men i praksis blir det sjelden bruk for mer enn 2-3 nivåer.

Kilder

    • Matthes A. (2019). Python Crash Course. no starch press