2014-08-30 43 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))