【问题标题】:How do I search for number in tuple which is in dictionary values?如何在字典值中的元组中搜索数字?
【发布时间】:2020-04-10 16:15:58
【问题描述】:

我是一个编码新手,我在编写这段代码时遇到了麻烦:

my_data ={
    'a' : (900, (1, 2, 3, 11, 12))
    'b' : (200, (1,2,3))
                }

while True:
    month = int(input("which month?"))
    for key in my_data.keys():
        if month in my_data.keys()[1] :
            print ('')

显然这段代码不起作用,但我不知道如何进一步使用它。

我希望程序最终打印的是..:

>>>which month?3
>>>'a', 'b'

所以...基本上我不知道如何匹配/搜索字典中值的元组中的元组中的输入数据(月份)(哇,这有意义吗??)

我很怀疑我的代码,如果这不是推荐的方式,请告诉我。

谢谢

【问题讨论】:

  • 你试过先写伪代码吗?
  • 'a''b' 称为“键”,但元组称为“值”。当您感兴趣的是值时,不要尝试对键进行操作。做你想做的最简洁的方法是同时遍历这两者——这是 .items() 方法允许的:for key, value in my_data.items():...
  • @AMC 不,我没有……我应该试试
  • @jez 谢谢,我会研究.items() 方法.. idk 它是如何工作的

标签: python dictionary tuples


【解决方案1】:

使用.items() 获得一个迭代器,让您可以同时遍历键和值。您可以在 for 语句(或者,就此而言,任何其他类型的赋值)中扩展多个变量(甚至在多个级别)。这使得后续代码更具可读性:

while True:
    month = int(input("which month?"))
    for key, (_, months) in my_data.items():
        if month in months:
            print(key)

名称_ 是“我打算在当前上下文中忽略的变量”的约定,但为了便于阅读,您始终可以将其替换为 900 和 200 所指的任何自然名称。

【讨论】:

    【解决方案2】:
    my_data = {"a": (900, (1, 2, 3, 11, 12)),
               "b": (200, (1, 2, 3))}
    
    while True:
        month = int(input("which month?"))
        for key, value in my_data.items():
            if month in value[1]:
                print(f"{key}: {value[0]}")
    

    【讨论】:

    • eyy 我也从其他帖子中看到了您的评论,谢谢!这行得通!
    【解决方案3】:

    我不确定您的原始 dict 将代表什么,因此没有任何建议,但您可以使用以下代码解决上述问题:

    my_data = {
        'a': (900, (1, 2, 3, 11, 12)),
        'b': (200, (1, 2, 3)),
        'c': (100500, (1, 2 ,5))
    }
    print('Enter `exit` to stop.')
    while True:
        i = input("Which month?\n")
        if i.lower() == 'exit':
            break
        try:
            i = int(i)
        except ValueError:
            print('The int is expected as input')
        else:
            print(*(name for name, values in my_data.items() if i in values[1]), sep=', ')
    

    此代码将按照您的要求工作

    Enter `exit` to stop.
    Which month?
    3
    a, b
    Which month?
    exit
    

    为了更好地理解这一点,您需要阅读有关 Python 列表理解的更多信息,即:https://www.pythonforbeginners.com/basics/list-comprehensions-in-python

    上面的代码真正做了什么,它只是遍历你的 dict 并只打印值包含输入数字的键。

    【讨论】:

      【解决方案4】:

      保持一个条件以避免无限循环。解决办法如下:

      my_data ={
          'a' : (900, (1, 2, 3, 11, 12)),
          'b' : (200, (1,2,3))
          }
      keys_where_exists = []
      while True:
          month = int(input("which month?"))
          if month == -1:
              break
          for key, value in my_data.items():
              if month in value[1]:
                  keys_where_exists.append(key)
      print(keys_where_exists)
      

      【讨论】:

        猜你喜欢
        • 2017-09-15
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 2017-02-03
        • 1970-01-01
        • 2011-10-16
        相关资源
        最近更新 更多