valores valor sumar recorrer ejemplo diccionarios diccionario declaracion consultar buscar actualizar python loops dictionary key-value

sumar - ¿El diccionario de Python3 itera a través de valores?



recorrer un diccionario en python (5)

Crea el diccionario opuesto:

PIX1 = {} for key in PIX0.keys(): PIX1[PIX0.get(key)] = key

Luego ejecute el mismo código en este diccionario en su lugar (utilizando PIX1 lugar de PIX0 ).

Por cierto, no estoy seguro acerca de Python 3, pero en Python 2 necesitas usar raw_input lugar de input .

Hola a todos, estoy intentando escribir un programa en Python que funciona como un juego de preguntas. Hice un diccionario al principio del programa que contiene los valores a los que se interrogará el usuario. Se establece como tal:

PIX0 = {"QVGA":"320x240", "VGA":"640x480", "SVGA":"800x600"}

Así que definí una función que usa un bucle for para iterar a través de las claves del diccionario y solicita la entrada del usuario, y compara la entrada del usuario con el valor que coincide con la clave.

for key in PIX0: NUM = input("What is the Resolution of %s?" % key) if NUM == PIX0[key]: print ("Nice Job!") count = count + 1 else: print("I''m sorry but thats wrong. The correct answer was: %s." % PIX0[key] )

Esto está funcionando bien, la salida se ve así:

What is the Resolution of Full HD? 1920x1080 Nice Job! What is the Resolution of VGA? 640x480 Nice Job!

Entonces, lo que me gustaría poder hacer es tener una función separada que haga la pregunta a la inversa, proporcionándole al usuario los números de resolución y haciendo que el usuario ingrese el nombre del estándar de pantalla. Así que quiero hacer un bucle for, pero realmente no sé cómo (o si es posible) iterar sobre los valores del diccionario y pedirle al usuario que ingrese las claves.

Me gustaría tener una salida que se parezca a esto:

Which standard has a resolution of 1920x1080? Full HD Nice Job! What standard has a resolution of 640x480? VGA Nice Job!

He intentado jugar con for value in PIX0.values() y eso me permitió recorrer los valores del diccionario, pero no sé cómo usarlo para "verificar" las respuestas del usuario con las teclas del diccionario. Si alguien pudiera ayudar sería apreciado.

EDIT: Lo siento, estoy usando Python3.


Dependiendo de su versión:

Python 2.x:

for key, val in PIX0.iteritems(): NUM = input("Which standard has a resolution of {!r}?".format(val)) if NUM == key: print ("Nice Job!") count = count + 1 else: print("I''m sorry but thats wrong. The correct answer was: {!r}.".format(key))

Python 3.x:

for key, val in PIX0.items(): NUM = input("Which standard has a resolution of {!r}?".format(val)) if NUM == key: print ("Nice Job!") count = count + 1 else: print("I''m sorry but thats wrong. The correct answer was: {!r}.".format(key))

También debe acostumbrarse a usar la nueva sintaxis de formato de cadena ( {} lugar del operador % ) de PEP 3101 :

https://www.python.org/dev/peps/pep-3101/


Puede buscar la clave correspondiente o puede "invertir" el diccionario, pero considerando cómo lo usa, sería mejor si simplemente iterara sobre pares clave / valor en primer lugar, lo que puede hacer con los items() . Entonces tienes ambas directamente en las variables y no necesitas una búsqueda en absoluto:

for key, value in PIX0.items(): NUM = input("What is the Resolution of %s?" % key) if NUM == value:

Por supuesto, puedes usar eso de ambas maneras.

O si realmente no necesita el diccionario para otra cosa, podría deshacerse del diccionario y tener una lista ordinaria de pares.


Si todos sus valores son únicos, puede hacer un diccionario inverso:

PIXO_reverse = {v: k for k, v in PIX0.items()}

Resultado:

>>> PIXO_reverse {''320x240'': ''QVGA'', ''640x480'': ''VGA'', ''800x600'': ''SVGA''}

Ahora puedes usar la misma lógica que antes.


Solo puede buscar el valor que corresponde con la clave y luego verificar si la entrada es igual a la clave.

for key in PIX0: NUM = input("Which standard has a resolution of %s " % PIX0[key]) if NUM == key:

Además, tendrá que cambiar la última línea para que se ajuste, de modo que imprimirá la clave en lugar del valor si obtiene la respuesta incorrecta.

print("I''m sorry but thats wrong. The correct answer was: %s." % key )

Además, recomendaría utilizar str.format para el formato de cadena en lugar de la sintaxis % .

Tu código completo debería tener este aspecto (después de agregar el formato de cadena)

PIX0 = {"QVGA":"320x240", "VGA":"640x480", "SVGA":"800x600"} for key in PIX0: NUM = input("Which standard has a resolution of {}".format(PIX0[key])) if NUM == key: print ("Nice Job!") count = count + 1 else: print("I''m sorry but that''s wrong. The correct answer was: {}.".format(key))