Python 如何通过检查长度从字典创建动态查询

Python 如何通过检查长度从字典创建动态查询,python,dictionary,Python,Dictionary,字典在下面。下面是长度为2和3的示例词典。通过检查条件,需要动态生成查询 a=[{'data':'abc'},{'prod':'def'}] 如果len(a)=2: #下面的查询必须生成 a=[{'data':'abc'},{'prod':'def'},{'email':'@gmail'}] 如果len(a)=3 #下面是查询 "query": { "bool": { "should": [

字典在下面。下面是长度为2和3的示例词典。通过检查条件,需要动态生成查询

a=
[{'data':'abc'},{'prod':'def'}]

  • 如果len(a)=2: #下面的查询必须生成
a=
[{'data':'abc'},{'prod':'def'},{'email':'@gmail'}]

  • 如果len(a)=3 #下面是查询

      "query": {
        "bool": {
          "should": [
            {
              "query_string": {
                "query": "*abc*",
                "fields": [
                  "data"
                ]
              }
            },
            {
              "query_string": {
                "query": "*def*",
                "fields": [
                  "prod"
                ]
              }
            },
            {
              "query_string": {
                "query": "*@gmail.com*",
                "fields": [
                  "email"
                ]
              }
            }
          ]
        }
      }
    }```
    
    

基本上,如果字典继续添加
{“query_string”:{“query”:“*@gmail.com*”,“fields”:[“email”]}
查询也会使用简单的迭代继续添加

Ex:

a = [{'data': 'abc'}, {'prod': 'def'}]
result = {"query": {
       "bool": {
         "should": []
         }
       }
}

for item in a:
    for k, v in item.items():
        result['query']['bool']['should'].append({
            "query_string": {
            "query": f"*{v}*",
            "fields": [
                 k
               ]}
             })
print(result)
{'query': {'bool': {'should': [{'query_string': {'fields': ['data'],
                                                 'query': '*abc*'}},
                               {'query_string': {'fields': ['prod'],
                                                 'query': '*def*'}}]}}}
输出:

a = [{'data': 'abc'}, {'prod': 'def'}]
result = {"query": {
       "bool": {
         "should": []
         }
       }
}

for item in a:
    for k, v in item.items():
        result['query']['bool']['should'].append({
            "query_string": {
            "query": f"*{v}*",
            "fields": [
                 k
               ]}
             })
print(result)
{'query': {'bool': {'should': [{'query_string': {'fields': ['data'],
                                                 'query': '*abc*'}},
                               {'query_string': {'fields': ['prod'],
                                                 'query': '*def*'}}]}}}

为什么我们需要给出
f
string所需的{v}。。。