Sanakirjat

Sanakirjassa alkiot määritellään avain:arvo -pareina:

atomipainot = {"H":  1.008, "C": 12.011, "O": 15.999}

Tämän määrittelyn jälkeen avainta vastaavan arvon voi noutaa näin:

print("Hiilen atomipaino on", atomipainot["C"])

tulostaa

Hiilen atomipaino on 12.011

Määrittelyssä käytetään siis kaarisulkeita, mutta kun arvoihin viitataan avaimella, käytetään hakasulkeita.

Tyhjän sanakirjan luominen

uusi_sanakirja = {}

Arvojen lisääminen sanakirjaan

Arvojen lisääminen sanakirjaan on helppoa: annetaan vain uusi avain ja arvo:

# Luodaan tyhjä sanakirja ja lisätään kolme avain:arvo -paria
atomipainot = {}
atomipainot["H"] = 1.008
atomipainot["C"] = 12.011
atomipainot["O"] = 15.999
print(atomipainot)

Tulostaa

{'H': 1.008, 'C': 12.011, 'O': 15.999}

Voit siis myös määritellä sanakirjan ensin tiettyjen avain:arvo parien kanssa ja lisätä siihen myöhemmin lisää pareja:

atomipainot = {"H":  1.008, "C": 12.011, "O": 15.999}
atomipainot["P"] = 30.973
print(atomipainot)

tulostaa

{'H': 1.008, 'C': 12.011, 'O': 15.999, 'P': 30.973}

Python tulostaa sanakirjojen avaimet aina yksinkertaisia lainausmerkkejä käyttäen.

in-avainsana toimii samaan tapaan kuin listojen kanssa:

# in-avainsanalla voi testata, onko avain sanakirjassa:
atomipainot = {"H":  1.008, "C": 12.011, "O": 15.999}
if "C" in atomipainot:
    print("Hiilen atomipaino on", atomipainot["C"])

tulostaa

Hiilen atomipaino on 12.011

Arvojen poistaminen sanakirjasta

Arvojen poistaminen sanakirjasta onnistuu del-avainsanalla:

atomipainot = {"H":  1.008, "C": 12.011, "O": 15.999}
del atomipainot["C"]
print(atomipainot)

tulostaa

{'H': 1.008, 'O': 15.999}

Sanakirjan läpikäyminen, items()

Sanakirjan items()-funktio antaa arvot läpikäyntiä varten:

atomipainot = {"H":  1.008, "C": 12.011, "O": 15.999}
for alkuaine, atomipaino in atomipainot.items():
    print("Alkuaineen {:s} atomipaino on {:.3f} g/mol".format(alkuaine, atomipaino))

tulostaa

Alkuaineen H atomipaino on 1.008 g/mol
Alkuaineen C atomipaino on 12.011 g/mol
Alkuaineen O atomipaino on 15.999 g/mol

Yleinen muoto siis

for AVAIN, ARVO in SANAKIRJA.items():
    print(AVAIN, ARVO) # Silmukassa voimme käyttää avaimia ja arvoja kuten haluamme.

Sanakirjan lajitteleminen

sorted()-funktiolla voi tulostaa avaimet aakkosjärjestyksessä tai arvot järjestyksessä (values-funktio):

atomipainot = {"P": 30.973, "C": 12.011, "O": 15.999}
print(sorted(atomipainot))
print(sorted(atomipainot.values()))

tulostaa

['C', 'O', 'P']
[12.011, 15.999, 30.973]

Huomaa kuitenkin, että alkuperäisen sanakirjan (atomipainot) järjestys ei muutu, vaikka kutsuisit sorted-funktiota. Vain funktion paluarvoja palaava lista muuttuu.

Huom! Ennen Pythonin versiota 3.6, sanakirjan avain:arvo parit olivat satunnaisessa järjestyksessä. Versiosta 3.6 eteenpäin ne ovat siinä järjestyksessä, missä ne on lisätty sanakirjaan. Tätä ei ole kuitenkaan vielä vahvistettu standardissa. Jos tarvitset sanakirjan, joka pysyy aina järjestyksessä, katso OrderedDict.

Listat sanakirjojen sisällä

Sanakirjan arvot voivat olla vaikka listoja:

# Sanakirjan arvot voivat olla vaikka listoja:
yhdisteet = {"C2H6": ["C",  2,  "H", 6],
             "NaCl": ["Na", 1, "Cl", 1]
          # indeksi:   0    1    2   3
            }
print(yhdisteet["C2H6"])
print("Yhdisteessa C2H6 on", yhdisteet["C2H6"][3], "vetyatomia")

tulostaa

['C', 2, 'H', 6]
Yhdisteessa C2H6 on 6 vetyatomia

Tehtävä 3.6.1