Hola chicos, soy nuevo en la codificación de Python, y estoy practicando con listas y dictados. Tengo un código donde cada nombre tiene un número establecido, y cuando ingreso el nombre se imprime su número.

name_list = ["bob","jim","james","julie","june"]
number_list = ["1","2","3","4","5"]
name_and_number = dict(zip(name_list, number_list))

def namenumb(something):
    try:
        print("{}'s number is {}".format(
            something, name_and_number[something]))
    except KeyError:
        print("That name doesn't exist"
            .format(namenumb))


while True:
    word = input("> ")
    namenumb(word)

Sin embargo, también quiero que funcione al revés, de modo que cuando escribo un número en su nombre se imprime. ¿Como podría hacerlo?

Gracias

1
Bobby Bob 30 ago. 2014 a las 12:51

3 respuestas

La mejor respuesta
name_list = ["bob","jim","james","julie","june"]
number_list = ["1","2","3","4","5"]
name_and_number = dict(zip(name_list, number_list))

def namenumb(something):
    try:
        for key,value in name_and_number.items():
            if key == something:
                print("{0}'s number is {1}".format(
                                             something, name_and_number[something]))
            elif value == something:
                print("{0}'s name is {1}".format(
                                             something, key))
    except KeyError:
        print("That name doesn't exist"
            .format(namenumb))


while True:
    word = raw_input("> ")
    namenumb(word)

Este debería ser el código que estás buscando, supongo ... dict.items () hace el trabajo ... !!

0
Anvesh 30 ago. 2014 a las 09:37

1) Simplemente puede cambiar los argumentos de su declaración zip y repetir lo mismo

number_and_name = dict(zip(number_list, name_list))
# {'1': 'bob', '3': 'james', '2': 'jim', '5': 'june', '4': 'julie'}

2) Otra forma de hacerlo es mediante la función index()

def get_name(number):
    print name_list[number_list.index(number)]
1
Ashoka Lella 30 ago. 2014 a las 09:07

No hay una forma directa de hacerlo, pero hay otras formas de hacerlo. Primero puede iterar sobre el dict y probar si el valor es el número ingresado.

for key, value in name_and_number.items():
    if value == number:
        print("{}'s number is {}".format(key, value))

La segunda forma es crear otro dict con el zip invertido y probarlo de la misma manera que lo hace.

number_and_name = dict(zip(number_list, name_list))

Otra forma es utilizar la función de índice. Con esto puedes evitar la cremallera por completo. Para obtener el número del nombre:

print("{}'s number is {}".format(name, number_list[name_list.index(name)]))

Para obtener el nombre del número:

print("{}'s number is {}".format(name_list[number_list.index(number)], number))
0
semptic 30 ago. 2014 a las 09:22