J'ai créé une fonction qui va chercher les âges dans un Dictionnaire
et montrer le nom correspondant :
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
Je sais comment comparer et trouver l'âge, mais je ne sais pas comment afficher le nom de la personne. De plus, je reçois un KeyError
à cause de la ligne 5. Je sais que ce n'est pas correct mais je n'arrive pas à trouver comment faire une recherche à l'envers.
Il n'y en a pas. dict
n'est pas destiné à être utilisé de cette façon.
for name, age in dictionary.items(): # for name, age in dictionary.iteritems(): (for Python 2.x)
if age == search_age:
print(name)
Si vous voulez à la fois le nom et l'âge, vous devriez utiliser .items()
qui vous donne des tuples de clés (key, value)
:
for name, age in mydict.items():
if age == search_age:
print name
Vous pouvez décomposer le tuple en deux variables distinctes dans la boucle for
, puis faire correspondre l'âge.
Vous devriez également envisager d’inverser le dictionnaire si vous devez effectuer des recherches par âge et que deux personnes n’ont pas le même âge :
{16: 'george', 19: 'amber'}
vous pouvez donc rechercher le nom d'un âge en faisant simplement
mydict[search_age]
Je l'ai appelé mydict
au lieu de list
parce que list
est le nom d'un type intégré, et vous ne devriez pas utiliser ce nom pour autre chose.
Vous pouvez même obtenir une liste de toutes les personnes ayant un âge donné en une seule ligne :
[name for name, age in mydict.items() if age == search_age]
ou s'il n'y a qu'une seule personne avec chaque âge :
next((name for name, age in mydict.items() if age == search_age), None)
ce qui vous donnera simplement None
s'il n'y a personne de cet âge.
Enfin, si le dict
est long et que vous êtes sous Python 2, vous devriez envisager d'utiliser .iteritems()
au lieu de .items()
comme Cat Plus Plus l'a fait dans sa réponse, puisqu'il n'a pas besoin de faire une copie de la liste.