Как мне найти номер в кортеже, который находится в значениях словаря? - PullRequest
2 голосов
/ 10 апреля 2020

Я новичок в коде ie, и у меня возникают проблемы при написании этого кода:

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

Очевидно, этот код не будет работать, но я не знаю, как дальше go Это.

Я хочу, чтобы программа, в конечном итоге, печатала: ..:

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

Итак ... в основном я не знаю, как сопоставить / найти входные данные (месяц) в кортеж в кортеже в значении в словаре (кто это имеет смысл ??)

Я очень сомневаюсь в своем коде, пожалуйста, скажите мне, если это не рекомендуемый способ.

Спасибо

Ответы [ 4 ]

2 голосов
/ 10 апреля 2020

Используйте .items(), чтобы получить итератор, который позволяет go одновременно просматривать ключи и значения. Вы можете расширить несколько переменных (даже на нескольких уровнях) в операторе for (или, в этом отношении, в любом другом типе присваивания). Это делает последующий код более читабельным:

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

Имя _ является соглашением для «переменной, которую я намерен игнорировать в текущем контексте», но для удобства чтения вы всегда можете заменить ее на естественную имя, на которое ссылаются ваши 900 и 200.

1 голос
/ 10 апреля 2020

Я не уверен, что будет представлять ваш исходный дикт, поэтому никаких предложений по этому поводу нет, но вы можете решить упомянутую проблему с помощью приведенного ниже кода:

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 и печатает только ключи, значения которых содержат число из ввода.

1 голос
/ 10 апреля 2020
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]}")
0 голосов
/ 10 апреля 2020

Соблюдайте условие, чтобы избежать бесконечного l oop. Решение может быть следующим:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...