如何在字典值中的元组中搜索数字



我是一个编码新手,在编写以下代码时遇到了问题:

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'

所以。。。基本上,我不知道如何在字典中的值的元组中匹配/搜索元组中的输入数据(月((这有什么意义??(

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

谢谢

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

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

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

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

我不确定您的原始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上迭代,并只打印值包含输入数字的键。

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

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)

最新更新