Jeg har laget en funksjon som slår opp alder i en "ordbok" og viser det matchende navnet:
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
Jeg vet hvordan jeg skal sammenligne og finne alderen, jeg vet bare ikke hvordan jeg skal vise navnet på personen. I tillegg får jeg en KeyError
på grunn av linje 5. Jeg vet at det ikke er riktig, men jeg kan ikke finne ut hvordan jeg får den til å søke bakover.
Det finnes ingen. Det er ikke meningen at dict
skal brukes på denne måten.
for name, age in dictionary.items(): # for name, age in dictionary.iteritems(): (for Python 2.x)
if age == search_age:
print(name)
Hvis du vil ha både navnet og alderen, bør du bruke .items()
som gir deg nøkkel (nøkkel, verdi)
-tupler:
for name, age in mydict.items():
if age == search_age:
print name
Du kan pakke ut tupelen i to separate variabler rett i for
løkken, og deretter matche alderen.
Du bør også vurdere å reversere ordboken hvis du generelt skal slå opp etter alder, og ikke to personer har samme alder:
{16: 'george', 19: 'amber'}
slik at du kan slå opp navnet for en alder ved å gjøre bare
mydict[search_age]
Jeg har kalt det mydict
i stedet for list
fordi list
er navnet på en innebygd type, og du bør ikke bruke det navnet til noe annet.
Du kan til og med få en liste over alle personer med en gitt alder på én linje:
[name for name, age in mydict.items() if age == search_age]
eller hvis det bare er én person med hver alder:
next((name for name, age in mydict.items() if age == search_age), None)
som bare vil gi deg Ingen
hvis det ikke er noen med den alderen.
Til slutt, hvis dict
er lang og du er på Python 2, bør du vurdere å bruke .iteritems()
i stedet for .items()
som Cat Plus Plus gjorde i sitt svar, siden det ikke trenger å lage en kopi av listen.