Hice una función que buscará las edades en un Diccionario
y mostrará el nombre que coincida:
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
Sé cómo comparar y encontrar la edad, pero no sé cómo mostrar el nombre de la persona. Además, estoy recibiendo un KeyError
debido a la línea 5. Sé que no es correcto pero no sé cómo hacer que busque hacia atrás.
No hay ninguno. El dict
no está pensado para ser utilizado de esta manera.
for name, age in dictionary.items(): # for name, age in dictionary.iteritems(): (for Python 2.x)
if age == search_age:
print(name)
Si quieres tanto el nombre y la edad, deberías usar .items()
que te da las tuplas clave (clave, valor)
:
for name, age in mydict.items():
if age == search_age:
print name
Puedes descomponer la tupla en dos variables separadas justo en el bucle for
, y luego hacer coincidir la edad.
También debería considerar invertir el diccionario si generalmente va a buscar por edad, y no hay dos personas que tengan la misma edad:
{16: 'george', 19: 'amber'}
para que puedas buscar el nombre de una edad simplemente haciendo
mydict[search_age]
Lo he llamado mydict
en lugar de list
porque list
es el nombre de un tipo incorporado, y no deberías usar ese nombre para nada más.
Incluso puedes obtener una lista de todas las personas con una edad determinada en una sola línea:
[name for name, age in mydict.items() if age == search_age]
o si sólo hay una persona con cada edad:
next((name for name, age in mydict.items() if age == search_age), None)
que sólo te dará "Ninguno" si no hay nadie con esa edad.
Por último, si el dict
es largo y estás en Python 2, deberías considerar usar .iteritems()
en lugar de .items()
como hizo Cat Plus Plus en su respuesta, ya que no necesita hacer una copia de la lista.