Как вывести форматированный текст из списка значений из JSON? - PullRequest
0 голосов
/ 26 июня 2019

Я работаю над слабаком.У меня есть файл JSON и код Python, который выводит что-то ослабить на основе ввода пользователя.Существует команда поиска, которая выводит результаты поиска из файла json.Текущий вывод не форматируется, потому что когда значения берутся из json, они добавляются в список, а затем возвращаются в основную программу python.

Я попытался создать цикл, который бы анализировал результаты поиска и вырубал их так, чтобы каждый набор значений был отдельным, а затем добавлялся в список, который можно отформатировать.Цикл, который я пробовал, на самом деле не работает, и я не очень уверен, как правильно создать цикл, который я могу использовать для форматирования вывода.Я также попытался отформатировать вывод с использованием format (), но он не работает, потому что это список.

Это пример текущего результата поиска.

if command.startswith(SEARCH):
        try:
            search = search_data(command.split(' ')[1])
            response = search
        except KeyError:
            response = 'This search key does not exist.'
        except TypeError:
            response = 'Wrong search input'

Это пример команды поиска, которую я импортирую из другого скрипта Python:

def search_data(keyword):

result = []
for key, value in data.items():
    first = value['first']
    last = value['last']
    if keyword in first:
        result.append(value)
    elif keyword in last:
        result.append(value)
return result

Это пример JSON:

{
"1": {
  "id": "1",
  "first": "Joe",
  "last": "Adam"
},
"2": {
  "id": "2",
  "first": "Mary",
  "last": "Smith"
},
"3": {
    "id": "3",
    "first": "Ann",
    "last": "John"
}
}

У меня есть другаявывод, который я форматирую с использованием этой строки кода, и я хочу отформатировать вывод списка таким же образом.

response = '*ID:* {}\n *First:* {}\n *Last:*
{}\n\n'.format(search['id'],search['first'],search['last'])

Ожидаемый вывод для пользователя, чтобы ввести поиск в Slack, используя Slackbot.Пользователь может ввести «поиск J», например, и выходные данные перечисляют соответствующий набор значений, которые имеют J в «первом» или «последнем» значениях.Мой текущий вывод выглядит примерно так:

[{"id":"1","first":"Joe","last":"Adam"}, 
{"id":"2","first":"Ann","last":"John"}]

, но я хочу отформатировать его как:

ID: 1
First: Joe
Last: Adam

ID: 2
First: Ann
Last: John

1 Ответ

0 голосов
/ 26 июня 2019

это должно сделать

"\n\n".join([f"ID: {out['id']}\nFirst: {out['first']}\nLast: {out['last']}" for out in result])
...