在JSON字典中搜索关键字

时间:2020-05-09 10:24:40

标签: python json

我是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]搜索选项为空,这是因为我被困在这里。

2 个答案:

答案 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"] ]

此外,我建议您使用对象而不是字典,这样会更简单,更干净。