Tein toiminnon, joka etsii iät sanakirjasta ja näyttää vastaavan nimen:
dictionary = {'george' : 16, 'amber' : 19}
search_age = raw_input("Provide age")
for age in dictionary.values():
if age == search_age:
name = dictionary[age]
print name
Tiedän, miten vertailla ja löytää ikä, mutta en vain tiedä, miten näyttää henkilön nimi. Lisäksi saan KeyError
-ilmoituksen rivin 5 takia. Tiedän, että se ei ole oikein, mutta en keksi, miten saan sen hakemaan taaksepäin.
Ei ole mitään. dict
ei ole tarkoitettu käytettäväksi tällä tavalla.
for name, age in dictionary.items(): # for name, age in dictionary.iteritems(): (for Python 2.x)
if age == search_age:
print(name)
Jos haluat sekä nimen että iän, sinun pitäisi käyttää .items()
, joka antaa sinulle avaintuplet (avain, arvo)
:
for name, age in mydict.items():
if age == search_age:
print name
Voit purkaa tuplen kahdeksi erilliseksi muuttujaksi suoraan for
-silmukassa ja sovittaa sitten iän.
Kannattaa myös harkita sanakirjan kääntämistä toisinpäin, jos etsit yleensä iän mukaan, eikä kahdella ihmisellä ole samaa ikää:
{16: 'george', 19: 'amber'}
joten voit hakea iän nimeä tekemällä vain seuraavasti
mydict[search_age]
Olen kutsunut sitä mydictiksi
eikä listaksi
, koska list
on sisäänrakennetun tyypin nimi, eikä sitä nimeä pitäisi käyttää mihinkään muuhun.
Voit jopa saada listan kaikista tietyn ikäisistä ihmisistä yhdellä rivillä:
[name for name, age in mydict.items() if age == search_age]
tai jos kullakin iällä on vain yksi henkilö:
next((name for name, age in mydict.items() if age == search_age), None)
joka antaa vain None
, jos ei ole ketään kyseisen ikäistä.
Lopuksi, jos dict
on pitkä ja käytät Python 2:ta, kannattaa harkita .iteritems()
käyttämistä .items()
:n sijaan, kuten Cat Plus Plus teki vastauksessaan, koska sen ei tarvitse tehdä kopiota listasta.