我是python的新手,我目前正试图允许用户在他们先前创建的笑话(设置和重点)中搜索关键字。如果用户在当前创建的笑话中搜索单词,那么我的目标是同时显示从中找到所搜索单词的笑话的设置/提示线。
如果在任何笑话中都找不到搜索到的单词,我还打算打印一条错误消息,指出“没有笑话与搜索字词匹配”。
这是我的代码:
import json
def input_something(enter_message):
while True:
inputSomething = input(enter_message)
if len(inputSomething) < 1:
print("Invalid Input - Enter Something.")
if len(inputSomething) >= 1:
return inputSomething
data_list = []
try:
with open('data.txt') as openfile:
data_list = json.load(openfile)
except:
TypeError
print('Welcome to the Joke Catalogue Admin Program.')
loop = True
while True:
print('\nChoose [a]dd, [l]ist, [s]earch, [v]iew, [d]elete or [q]uit.')
choice = input('> ')
elif choice == 's':
Search_Term = input_something('Enter search term: ')
elif choice == 'q':
print('Quitting joke bot! See you next time!')
loop = False
break
else:
print("Invalid choice - Please only select from the options provided!")
如您所见,[s]搜索选项为空,这是因为我被困在这里。
答案 0 :(得分:0)
此代码应返回搜索结果列表:
elif choice == 's':
Search_Term = input_something('Enter search term: ').lower()
print("List of jokes:")
validIndexes = []
for index, New_Joke in enumerate(data_list):
if Search_Term in New_Joke["Setup"].lower() or Search_Term in New_Joke["Punchline"].lower():
validIndexes.append(index)
print("Search results:\n")
for index in validIndexes:
print(f"Index: {index} -- {data_list[index]['Setup']}")
答案 1 :(得分:0)
或更简单取决于您需要搜索的夹心字段:
result = filter(lambda j: s in j["Setup"] or s in j["Punchline"], data_list)
# do what you want with the outputed list
您还可以使用理解力:
result = [ r for r in data_list if s in r["Setup"] or s in r["Punchline"] ]
此外,我建议您使用对象而不是字典,这样会更简单,更干净。