Функция для поиска слова в словаре

#python #function #dictionary

#python #функция #словарь

Вопрос:

Моя задача — выполнить поиск слова в значениях dictionary (extra_key) и вернуть ключ dict, если он прошел успешно, в противном случае верните «нет». Моя функция хорошо работает для поиска слова:

 def extra(data):
    for x in data:
        for j in extra_key:
            if x in extra_key[j]:
                print('found:', x, j)
                return j

extra(['Cannabidiol', 'supensoid', 'agent', 'for', 'treatment', 
'of', 'arthritis', 'and', 'preparation', 'method', 'thereof'])
 

Вывод: found: agent composition (здесь все в порядке)

Но когда я пытаюсь вернуть «нет», если слово не было найдено, оно игнорирует мой положительный результат:

 def extra(data):
    for x in data:
        for j in extra_key:
            if x.lower() in extra_key[j]:
                print('found:', x, j)
                return j
            else:
                return 'no'

extra(['Cannabidiol', 'supensoid', 'agent', 'for', 'treatment', 
'of', 'arthritis', 'and', 'preparation', 'method', 'thereof'])
 

Вывод: 'no'

Но это должно быть как в предыдущем случае. Почему вывод ‘no’? И как это исправить?

Комментарии:

1. Что такое extra_key ?

2. @Aplet123, это словарь. И это написано внутри моего вопроса

3. extra_key не определено в вашем вопросе.

4. У меня уже есть правильный ответ, спасибо, ребята

Ответ №1:

Если одно совпадение не работает, вы не должны возвращать «нет» из функции, потому что могут быть другие совпадения. Возвращайте только "no" в том случае, если вы не можете найти ни одного совпадения (в конце функции):

 def extra(data):
    for x in data:
        for j in extra_key:
            if x.lower() in extra_key[j]:
                print('found:', x, j)
                return j
    return 'no'
 

Это работает, потому что, если найдено совпадение, return j будет вызвана функция и завершится досрочно, поэтому она никогда не попадет в return 'no' . Однако, если совпадения нет, цикл будет выполняться до конца и встретит return 'no' .

Комментарии:

1. Это имеет смысл. Спасибо! PS Я могу принять ваш ответ только через 7 минут 😉

Ответ №2:

Я считаю, что проблема в том, что вы возвращаете «нет» только после проверки первого элемента в словаре. Попробуйте:

 def extra(data):
    for x in data:
        for j in extra_key:
            if x.lower() in extra_key[j]:
                print('found:', x, j)
                return j
    
    return 'no'

extra(['Cannabidiol', 'supensoid', 'agent', 'for', 'treatment', 
'of', 'arthritis', 'and', 'preparation', 'method', 'thereof'])
 

Это вернет ‘no’ только в том случае, если не было совпадений ни по одному из переданных вами слов.