Вы ищете if search_val in val
вместо if val == search_val
, поскольку val
- это кортеж из нескольких строк, и вы не хотите проверять, равен ли ваш search_val
полному кортежу, просто кортеж содержит ваш search_val
.
Поскольку ожидаемый вывод включает в себя те строки, которые не могут быть найдены в значениях вашего словаря, вы можете написать что-то вроде:
d = {'salam':('hi', 'ciao', 'bonjour'), 'mamnoon':('thanks', 'grazie', 'merci')}
l = ['hi', 'thanks', 'very', 'much']
l1 = []
for search_val in l:
for key, val in d.items():
if search_val in val:
l1.append(key)
break
else:
l1.append(search_val)
print(l1)
Вывод:
['salam', 'mamnoon', 'very', 'much']
Здесь мы прекращаем поиск в словаре, как только мы нашли ключ с search_val
(так как мы предполагаем, что только один ключ будет иметь это значение в своем кортеже). Предложение else
for
l oop будет выполнено, если l oop завершится нормально (т.е. не завершится из-за нажатия на оператор break
), что соответствует search_val
, не найденному , В этом случае мы append
от search_val
до l1
.
Альтернатива без использования синтаксиса for/else
может использовать флаг found
:
d = {'salam':('hi', 'ciao', 'bonjour'), 'mamnoon':('thanks', 'grazie', 'merci')}
l = ['hi', 'thanks', 'very', 'much']
l1 = []
for search_val in l:
found = False
for key, val in d.items():
if search_val in val:
l1.append(key)
found = True
if not found:
l1.append(search_val)
print(l1)