1
votes

Pourquoi le code ne fonctionne pas correctement pour l'impression ayant {en python

J'ai un dictionnaire ci-dessous:

a = event['params']['path']['matchphrase']  #term
b = list(event['params']['querystring'].keys())[0]   #dataproduct.keyword
c = list(event['params']['querystring'].values())[0]  #health
    
body=f"{query: {{a} : {{b}: {c}}}}"
print(body)

Je voudrais accéder aux clés et valeurs du dictionnaire événement ci-dessus et encadrer un nouveau dictionnaire comme suit: p >

{"query": {"term": {"dataproduct.keyword": "health"}}}

Voici le code que j'ai essayé:

event = {
    "body-json": {},
    "params": {
        "path": {
            "matchphrase": "term"
        },
        "querystring": {
            "dataproduct.keyword": "health"
        },
        "header": {
            "Accept": "application/json"
        }
    },
    "resource-path": "/{matchphrase}"
}

Suis-je en train de manquer quelque chose?


1 commentaires

body = f '{{"query": {{{a}: {{{b}: {c}}}}}}}'


3 Réponses :


2
votes

Cela devrait fonctionner:

body = {"query":{str(a):{str(b):str(c)}}}
print(body)


0 commentaires

2
votes

L'échappement est incorrect.

Essayez plutôt ceci:

body = f'{{"query": {{{a!r}: {{{b!r}: {c!r}}}}}}}'

J'ai également ajouté ! r qui renverra la représentation réelle ( repr ) de l'objet (vous n'avez donc pas besoin d'ajouter artificiellement des guillemets).


0 commentaires

1
votes

vous pouvez créer un dictionnaire, puis en obtenir une version sous forme de chaîne en utilisant json.dumps.

{"query": {"term": {"dataproduct.keyword": "health"}}}

Sortie: p>

import json
    
event = {
    "body-json": {},
    "params": {
        "path": {"matchphrase": "term"},
        "querystring": {"dataproduct.keyword": "health"},
        "header": {"Accept": "application/json"},
    },
    "resource-path": {"matchphrase}"},
}
    
a = event["params"]["path"]["matchphrase"]  # term
b = list(event["params"]["querystring"].keys())[0]  # dataproduct.keyword
c = list(event["params"]["querystring"].values())[0]  # health
    
result = {"query": {a: {b: c}}}
    
print(json.dumps(result))


2 commentaires

pouvez-vous répondre à la question ci-dessous stackoverflow.com/questions/63050735/...


@aysh Je n'ai aucune expérience avec dynamodb et la recherche élastique.