2014-08-30 3 views
1

Привет, ребята, я новичок в кодировании на питоне, и я занимаюсь списками и dict. У меня есть код, где каждое имя имеет заданное число, и когда я ввожу имя, их номер печатается.Python zip() function

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) 

Однако я хочу работать в другую сторону вокруг как хорошо, так что, когда я набираю номер в их имени получает распечатаны. Как мне это сделать?

Благодаря

+0

Как вы думаете? Также этот 'while True:' не является отличной идеей, по крайней мере, без каких-либо 'break' в цикле. –

+0

вы можете использовать dict.get со значением по умолчанию для печати –

ответ

0
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) 

это должно быть код, что вы ищете я думаю .. Dict. items() делает работу .. !!

1

1) Вы можете просто переключают аргументы вашего почтового заявлении, и повторите то же самое

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

2) Другой способ сделать это с помощью index() функции

def get_name(number): 
    print name_list[number_list.index(number)] 
+0

Если я не ошибаюсь, '.index()' работает в линейном времени, поэтому для больших списков он будет заметно медленнее, чем словарь. – sredmond

+0

@sredmond, определенно '.index()' работает в линейном времени, но я решил, что в списке всего 5 элементов, поэтому не имеет значения –

0

Eсть нет прямого способа сделать это, но есть и другие способы сделать это. Сначала вы можете выполнять итерацию по dict и test, если значение - введенный номер.

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

Второй способ - создать другой dict с инвертированной почтой и протестировать его так же, как и вы.

number_and_name = dict(zip(number_list, name_list)) 

Другим способом является использование index function. С этим вы можете полностью избежать zip. Чтобы получить от имени:

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

Чтобы получить имя из числа:

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