Tengo una lista de posibles éxitos en un diccionario. Me gustaría obtener la entrada del usuario, luego buscar en el diccionario para ver si alguna de las palabras se encuentra en la cadena. Si uno es (no importa cuál) quiero asignar a esa palabra encontrada una variable. Simplemente no puedo entender la última parte; almacenar el elemento encontrado en una variable. Entonces, si escribo "cuéntame sobre horus", tomará la palabra clave 'horus' e imprimirá información de ese valor en el diccionario.

lookup_dict = {'horus': "description of Horus.", 'anubis': "description of Anubis."}

userin = input(":  ")
res = any(ele in userin for ele in lookup_dict)
if res is True:
    # somehow print the description from the associated element
2
Literally Mom 28 sep. 2019 a las 18:03

3 respuestas

La mejor respuesta

Si solo le importa si la palabra es parte de la cadena de entrada, y no le importa si hay dos o más palabras en la cadena de entrada:

lookup_dict = {'horus': "description of Horus.", 'anubis': "description of Anubis."}

userin = input(":  ")
for word, definition in lookup_dict.items():
    if word in userin:
        print(definition)
4
jfaccioni 28 sep. 2019 a las 15:10

Espero que esto ayude

lookup_dict = {'horus': "description of Horus.", 'anubis': "description of Anubis."}

userin = input(":  ").split(" ")
for i in userin:
    if i in lookup_dict.keys():
        print(lookup_dict[i])
0
soheshdoshi 28 sep. 2019 a las 15:14

La solución más básica para su pregunta es recorrer todas las teclas en el diccionario, verificando si aparecen en la cadena que ingresa el usuario. Tenga en cuenta que, de forma predeterminada, Python itera sobre las teclas (pruebe for key in lookup_dict: print(key)), podemos usar .items() para recorrer las tuplas de (key, value).

lookup_dict = {'horus': "description of Horus.", 'anubis': "description of Anubis."}

userin = input(":  ")

for key, value in lookup_dict.items():
    # Checks if substring `key` appears in `userin`
    if key in userin:
        print(value)

Es posible que no le importe si el usuario escribe Horus u horus , en cuyo caso puede usar .lower() en la cadena userin. Si desea obtener aún más fantasía, puede usar expresiones regulares utilizando el módulo de la biblioteca estándar de Python re, que es básicamente un mini-lenguaje específicamente diseñado para hacer coincidir cadenas. (Echa un vistazo a https://regexr.com/ para jugar.) El ejemplo podría verse así:

import re 
# Will match Horus or horus but must have one whitespace after the word 
# anubis must be matched directly, we have not used any special regex methods 
lookup_dict = {'[hH]orus\s': "description of Horus.", 'anubis': "description of Anubis."} 
userin = input(":  ") 

for key, value in lookup_dict.items(): 
    # Checks if regex `key` appears anywhere in `userin` 
    if re.search(key, userin): 
        print(value)
0
The Fonz 28 sep. 2019 a las 15:47
58147556