Как добавить поле состояния в вывод словаря?

#python

#python

Вопрос:

Мне нужно написать python API для вызова пользователями. Спецификации ввода и вывода приведены ниже в качестве одного примера:

 // input
{"keyword":"iPhone", 
 "category":"phone"
}

// output
{
"keyword": "iPhone", 
"status": "success", 
"result": [
 {
 "word": "iPhone", 
 "type": "smart_phone"
 }, "extend":{} 
          ]
}
 

Я не собираюсь писать http-сервис, а просто обычную функцию python для вызова, и пользователю необходимо установить:

 pip install my_api
 

Входные данные — это словарь, а выходные данные также являются словарем. Как заполнить поле «статус» в выводимом словаре? Я считаю, что это необходимо для службы http, чтобы указать, является ли вызов успешным или нет. Поскольку я не использую http-сервис, я не знаю, как сгенерировать значение для «статуса» в выводе. Функция, которую я пишу, будет выглядеть так:

 def query_by_dict(input: Dict) -> Dict:

    result = {}
    ...
    result = self.query_helper(input)
    return result
 

если self.query_helper() завершается с ошибкой или не выдает никакого значения, я просто верну клиенту пустой результат dict ‘result’ . Почему поле «статус» находится в спецификации вывода?

Комментарии:

1. Просто вызовите result['status'] = "<request status>" непосредственно перед тем, как вернуть результат из вашей функции.

Ответ №1:

Если мы знаем, что result в query_by_dict функции уже есть словарь, мы можем просто добавить еще один аргумент в этот словарь. Как показано ниже:

 def query_by_dict(input: Dict) -> Dict:

    result = {}
    ...
    result = self.query_helper(input)
    result['status'] = 'success' if result else 'failure'
    return result
 

В приведенном выше примере важной частью кода является result['status'] то, где мы определяем status аргумент результирующего словаря. Поскольку мы знаем, что пустой результат словаря является ошибкой, мы можем просто проверить это и задать status аргумент.

Комментарии:

1. Но как получить значение <желаемый результат состояния>? Это будет либо «успех», либо «сбой». Как мне узнать, какое из них используется для каждого вызова? Когда dict пуст, это успех, в противном случае — сбой. Так полезно ли это поле?

2. @marlon как насчет results["status"] = bool(result) and "success" or "failure" ?

3. @DmitryBelaventsev, вы имеете в виду сначала получить False и True, а затем преобразовать их в success и failure?

4. да, почему бы и нет? 🙂 но ИМО это не очень полезно. лучше просто логическое значение

5. @marlon Я обновил свой ответ, чтобы можно было получить результат состояния.