【问题标题】:Python zip() functionPython zip() 函数
【发布时间】:2014-08-30 08:51:04
【问题描述】:

大家好,我是 python 编码的新手,正在练习使用列表和字典。我有一个代码,每个名字都有一个固定的数字,当我输入名字时,他们的数字就会被打印出来。

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)

但是,我也希望它以相反的方式工作,所以当我在他们的名字中输入一个数字时,会打印出来。我该怎么做?

谢谢

【问题讨论】:

  • 你怎么看?此外,如果循环中至少没有任何breaks,这个while True: 也不是一个好主意。
  • 你可以使用带有默认值的dict.get来打印

标签: python


【解决方案1】:

1) 您可以简单地切换 zip 语句的参数并重复相同的操作

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

【讨论】:

  • 如果我没记错的话,.index() 在线性时间内运行,所以对于大型列表,它会明显比字典方法慢。
  • @sredmond,.index() 肯定会在线性时间内运行,但我认为列表中只有 5 个元素,所以没关系
【解决方案2】:
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() 可以工作..!!

【讨论】:

    【解决方案3】:

    没有直接的方法可以做到这一点,但有其他方法可以做到这一点。 首先,您可以遍历 dict 并测试该值是否为输入的数字。

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

    第二种方法是使用反向 zip 创建另一个 dict 并以与您相同的方式对其进行测试。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 2017-05-14
      • 2015-10-19
      • 2012-07-31
      • 2021-07-24
      相关资源
      最近更新 更多