Почему код не работает правильно для печати с {in python - PullRequest
1 голос
/ 14 июля 2020

У меня есть словарь ниже:

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

Я хотел бы получить доступ к указанным выше event ключам и значениям словаря и создать новый словарь следующим образом:

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

Вот код, который я пробовал:

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)

Я что-то упустил?

Ответы [ 3 ]

2 голосов
/ 14 июля 2020

Неправильное экранирование.

Попробуйте вместо этого:

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

Я также добавил !r, который вернет реальное представление (repr) объекта ( так что вам не нужно искусственно добавлять кавычки).

2 голосов
/ 14 июля 2020

Это должно работать:

body = {"query":{str(a):{str(b):str(c)}}}
print(body)
1 голос
/ 14 июля 2020

вы можете создать словарь, а затем получить его строковую версию, используя json.dumps.

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(<b>json.dumps(result)</b>)

Вывод:

{"query": {"term": {"dataproduct.keyword": "health"}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...