Как сделать функцию, которая будет искать значения и красиво их "упаковывать"
Имеется 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"]