#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’ только в том случае, если не было совпадений ни по одному из переданных вами слов.