Python 如何查找与一个或多个单词的输入查询匹配的所有字符串

Python 如何查找与一个或多个单词的输入查询匹配的所有字符串,python,string,Python,String,我目前正在处理一个JSON文件,该文件中存储了许多剧院位置,以及与每个位置对应的代码 我目前正在做的是,如果用户在某个位置输入,我将返回相应的代码。 我想做的是,分割输入字符串,在JSON文件中搜索相应的关键字,并返回相应的位置匹配及其代码 这是我目前的代码: queryname = input("Enter the Venue Name:") def query(): for d in data['BookMyShow']['arrVenues']: if d['Ve

我目前正在处理一个JSON文件,该文件中存储了许多剧院位置,以及与每个位置对应的代码

我目前正在做的是,如果用户在某个位置输入,我将返回相应的代码。 我想做的是,分割输入字符串,在JSON文件中搜索相应的关键字,并返回相应的位置匹配及其代码

这是我目前的代码:

queryname = input("Enter the Venue Name:")

def query():
    for d in data['BookMyShow']['arrVenues']:
        if d['VenueName'] == queryname:
            yield d['VenueCode']

f1 = query()
for f in f1:
    print(f)
我将把input()语句更改为input.split(),这样我就可以存储各个关键字。但是,我不知道如何更改我的函数,以便搜索每个单独的关键字并返回相关字符串

因此,一个例子如下:

Enter the Venue Name:
Carnival
我的文件包含3个嘉年华实例(嘉年华班加罗尔、嘉年华孟买和嘉年华德里)

我希望它返回的输出是:

Carnival Bangalore A000
Carnival Mumbai A001
Carnival Delhi A002
这是我的数据文件片段的外观:

{
  "BookMyShow": {
    "arrVenues": [
      {
          "VenueCode": "AAAD",
          "VenueName": "Khinvasara Cineplex (Apsara Cinema): Aurangabad",
          "VenueSeq": "9999"
      },
      {
         "VenueCode": "AACM",
         "VenueName": "Anjana Chitra Mandir: Raniganj",
         "VenueSeq": "9999"
      },
      {
         "VenueCode": "AAME",
         "VenueName": "Shree Ram Cinema: Deesa",
         "VenueSeq": "9999"
      },
      {
        "VenueCode": "AASH",
        "VenueName": "Adarsh Chitra Mandir: Bhandara",
        "VenueSeq": "9999"
      },
      {
        "VenueCode": "ABCC",
        "VenueName": "Abhay Cinema: Chandrapur",
        "VenueSeq": "9999"
      }]
    }
}

您可以添加另一个循环并在操作符中使用

def query():
    keywords = queryname.split(' ')
    for d in data['BookMyShow']['arrVenues']:
        for keyword in keywords:
            if(keyword in d['VenueName']):
                yield(d) # you should yield the whole venue because you want to print both the venue code and name later on
                break # this is so that we don't yield it twice when multiple keywords match
要以显示的格式打印场馆,您可以执行以下操作:

f1 = query()
for f in f1:
    print(f['VenueName'], f['VenueCode'])
如果不区分大小写,只需将两侧转换为小写/大写:

if keyword.lower() in d['VenueName'].lower():
如果只想匹配包含所有关键字的场馆,请使用以下选项:

def query():
    keywords = queryname.split(' ')
    for d in data['BookMyShow']['arrVenues']:
        reject = False
        for keyword in keywords:
            if not (keyword.lower() in d['VenueName'].lower()):
                reject = True
                break
        if not reject:
            yield d

您的
数据是什么样子的?你能发布一个片段吗?发布一个你的
数据样本
是的,当然,等一下,这就是他所需要的吗?只需使用
中的
操作符来搜索字符串?“我想这是微不足道的。”清洁工,这太棒了!谢谢:)我想知道是否有办法使搜索不区分大小写?但是,我想我必须使用正则表达式,嗯?@Teju_M你可以使用
.lower()
非常感谢@Sweeper,我没想到解决方案会这么简单。在这里,我很恼火,我不得不使用正则表达式:P@Sweeper,你认为有没有一种方法可以改变它,使它只找到相关的关键字。因为如果我输入'Chitra Mandir',例如,它会返回包含Chitra或Mandir的所有结果,我希望它只过滤包含这两个单词的字符串。