2014-08-30 60 views
1

嗨,大家好我是python編程的新手,並且正在使用list和dict來練習。我有一個代碼,其中每個名稱都有一個設置的號碼,當我輸入名稱時,他們的號碼會被打印出來。Python zip()函數

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

你覺得呢?此外,「雖然真:」在循環中至少沒有任何「中斷」並不是一個好主意。 – 2014-08-30 08:59:58

+0

你可以使用帶缺省值的dict.get來打印 – 2014-08-30 10:30:26

回答

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) 

這應該是你的代碼在找什麼我想..字典。項目()做的工作..!

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 2014-08-30 09:42:58

+0

@sredmond,絕對是'.index()'在線性時間運行,但我認爲列表中只有5個元素,所以它應該沒關係 – 2014-08-30 09:53:42

0

有沒有直接的方式來做到這一點,但還有其他的方式來做到這一點。 首先,您可以迭代字典並測試值是否爲輸入的數字。

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

第二種方法是創建一個逆轉zip的其他字典,並以與您相同的方式進行測試。

number_and_name = dict(zip(number_list, name_list)) 

另一種方法是使用index function。有了這個,你可以完全避免拉鍊。 從名稱獲得數:

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

從數量得到名稱:

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