Я хочу сделать программу поиска, но я застрял в определенном алгоритме. Во-первых, я получу любое слово от пользователей Затем проверьте, включены ли слова пользователя в какие-либо ключевые слова из значения di. Если слова пользователя включены, верните значение ключа в виде списка. Если слова пользователя не включены, то выполнить программу.
Например, если я ввожу «хороший парень», функция должна возвращать «Мэттью» в качестве типа списка.
dic_1 = {'matthew':'he is a nice guy', 'dennis':'he is a bad guy', 'alex':'he is a good guy'}
dic_2 = {'manchester': 'city from england', 'tokyo':'city from japan', 'rome':'city from italy'}
def searchWords(*dicts):
list_check = []
search = input("Enter word for search: ")
for dic in dicts:
if search in dic[word]:
list_check.append(keyword)
else:
print("None")
break
print(searchWords(dic_1))
Я продолжаю застревать для приближения к алгоритму... Я надеюсь, что вы, ребята, дадите мне совет или идею, чтобы сделать этот алгоритм.
print(x[0]) if len(x:=list(filter(lambda x: search_str in x[1], {'matthew':'he is a nice guy', 'dennis':'he is a bad guy', 'alex':'he is a good guy'}.items()))) else 'not found'
с filter
Пожалуйста, добавьте, что вы узнали при отладке неудачного примера.
Вы можете попробовать, как показано ниже, используя понимание списка, чтобы вытащить совпадающие ключи:
dic_1 = {'matthew':'he is a nice guy', 'dennis':'he is a bad guy', 'alex':'he is a good guy'}
dic_2 = {'manchester': 'city from england', 'tokyo':'city from japan', 'rome':'city from italy'}
def searchWords(dictex):
search = input("Enter word for search: ")
return [k for k,v in dictex.items() if search in v]
print(searchWords(dic_1))
Выход:
Enter word for search: nice guy
['matthew']
Другой вывод:
Enter word for search: guy
['matthew', 'dennis', 'alex']
Во-первых, вы можете объединить свои словари, используя ЦепьКарта
from collections import ChainMap
chain = ChainMap(*dicts)
Затем вы можете искать, используя понимание списка для повышения производительности.
results = [v for v in chain.values() if 'keyword' in v]
Вы также можете сделать это с помощью функции Python фильтр
newDict = dict(filter(lambda elem: 'keyword' in elem[1], chain.items()))
Простой способ
dic_1 = {'matthew':'he is a nice guy', 'dennis':'he is a bad guy', 'alex':'he is a good guy'}
dic_2 = {'manchester': 'city from england', 'tokyo':'city from japan', 'rome':'city from italy'}
def searchWords(*dicts):
lst = []
t = input('Write something to search:')
for dict_ in dicts:
for k,v in dict_.items():
if t in v:
lst+=[k]
return lst
Использование понимания списка.
def searchWords(*dicts):
t = input('Write something to search:')
lst = [k for dict_ in dicts for k,v in dict_.items() if t in v]
return lst
Вам нужно перебрать все пары ключ: значение в dict, а затем проверить, включено ли слово в значение или нет.