Ho fatto una funzione che cercherà le età in un dizionario
e mostrerà il nome corrispondente:
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
So come confrontare e trovare l'età, ma non so come mostrare il nome della persona. Inoltre, sto ottenendo un KeyError
a causa della linea 5. So che non è corretto ma non riesco a capire come fare la ricerca al contrario.
Non c'è. dict
non è destinato ad essere usato in questo modo.
for name, age in dictionary.items(): # for name, age in dictionary.iteritems(): (for Python 2.x)
if age == search_age:
print(name)
Se volete sia il nome e l'età, dovreste usare .items()
che vi dà tuple chiave (key, value)
:
for name, age in mydict.items():
if age == search_age:
print name
Puoi spacchettare la tupla in due variabili separate proprio nel ciclo for
, quindi abbinare l'età.
Dovresti anche considerare di invertire il dizionario se generalmente stai cercando per età, e non ci sono due persone che hanno la stessa età:
{16: 'george', 19: 'amber'}
quindi puoi cercare il nome di un'età facendo semplicemente
mydict[search_age]
L'ho chiamato mydict
invece di list
perché list
è il nome di un tipo incorporato, e non si dovrebbe usare quel nome per altro.
Puoi anche ottenere una lista di tutte le persone con una data età in una sola riga:
[name for name, age in mydict.items() if age == search_age]
o se c'è solo una persona con ogni età:
next((name for name, age in mydict.items() if age == search_age), None)
che ti darà semplicemente Nessuno
se non c'è nessuno con quell'età.
Infine, se il detto
è lungo e sei su Python 2, dovresti considerare di usare .iteritems()
invece di .items()
come ha fatto Cat Plus Plus nella sua risposta, poiché non ha bisogno di fare una copia della lista.