Как сделать функцию, которая будет искать значения и красиво их "упаковывать"

Имеется json файл. Пример данных в нем:

 {
   "users": {
      "count": 3,
      "data": [
         {
            "nick": "123",
            "id": 566010585,
            "num": 1,
            "num_sheets": 2,
            "ts": {
               "count": 2,
               "ts1": {
                  "mark": "ЗАЗ",
                  "model": "968 «Запорожец»",
                  "type": "retro",
                  "number": "Н827СР78"
               },
               "ts2": {
                  "mark": "ГАЗ",
                  "model": "3110 «Волга»",
                  "type": "standart",
                  "number": "Т044ОК77"
               }
            }
         },

И имеется функция, которая ищет совпадение по ключу 'id' в это файле:

 def check_ts(id):
    data = json.load(open('data_bot.json', 'r', encoding = 'utf=8'))
    for i in data["users"]["data"]:
        if i["id"] == int(id):

Я новичок в программировании и не сильно разбираюсь в словарях и списках. Хочу усовершенствовать эту функцию, что бы она упаковывала данные из ключа 'ts' в такое сообщение:

Количество - 2
ЗАЗ 968 «Запорожец» | Н827СР78 | retro
ГАЗ 3110 «Волга» | Т044ОК77 | standart

Подскажите, как это можно было бы сделать? (Количество может быть до 6 единиц)


Ответы (1 шт):

Автор решения: Zhihar

делайте в лоб - идёте по полям и нужные объединяете в строку

res = []
for obj in data["users"]["data"]:
    for key, elem in obj["ts"].items():
        if key[:2] == "ts": # нам нужны только структуры вида "ts***"
            res.append(' | '.join((elem['model'], str(elem['number']), elem['type'])))

или если вы любитель одной строки:

res = [' | '.join((elem['model'], str(elem['number']), elem['type'])) for obj in data["users"]["data"] for key, elem in obj["ts"].items() if key[:2] == "ts"]
→ Ссылка