Telegram bot (pyTelegramBotAPI) передать список прогноза в bot.send_message

Доброго времени суток!

Есть отсортированный список прогноза погоды:

lst = ['30.07.2020',
 {'current_temp': 19,
  'detailed_status': 'облачно с прояснениями',
  'feeling': 18,
  'humidity': 75,
  'icon': '04d',
  'max_temp': 20,
  'min_temp': 19,
  'pressure': 1011,
  'speed': 4.38,
  'time': '06:00'},
 {'current_temp': 22,
  'detailed_status': 'небольшая облачность',
  'feeling': 18,
  'humidity': 50,
  'icon': '02d',
  'max_temp': 23,
  'min_temp': 22,
  'pressure': 1011,
  'speed': 6.12,
  'time': '09:00'},

 '31.07.2020',
 {'current_temp': 15,
  'detailed_status': 'переменная облачность',
  'feeling': 12,
  'humidity': 72,
  'icon': '03n',
  'max_temp': 15,
  'min_temp': 15,
  'pressure': 1008,
  'speed': 4.89,
  'time': '00:00'},
 {'current_temp': 14,
  'detailed_status': 'пасмурно',
  'feeling': 11,
  'humidity': 76,
  'icon': '04d',
  'max_temp': 14,
  'min_temp': 14,
  'pressure': 1007,
  'speed': 4.2,
  'time': '03:00'},
 {'current_temp': 16,
  'detailed_status': 'пасмурно',
  'feeling': 13,
  'humidity': 64,
  'icon': '04d',
  'max_temp': 16,
  'min_temp': 16,
  'pressure': 1007,
  'speed': 4.8,
  'time': '06:00'},
 {'current_temp': 19,
  'detailed_status': 'небольшой дождь',
  'feeling': 14,
  'humidity': 51,
  'icon': '10d',
  'max_temp': 19,
  'min_temp': 19,
  'pressure': 1005,
  'speed': 6.33,
  'time': '09:00'},

Я хочу передать этот список в сообщение от бота (send_message) в таком виде:

Дата: 30.07.2020
Время: 06:00
Температура: 19
Минимальная температура: 19
Максимальная температура: 20
Чувствуется как: 18
Влажность: 75
Давление: 1011
Статус: облачно с прояснениями
Скорость ветра: 4.38

Время: 09:00
Температура: 22
Минимальная температура: 22
Максимальная температура: 23
Чувствуется как: 18
Влажность: 
Давление: 1011
Статус: небольшая облачность
Скорость ветра: 6.12

Дата: 31.07.2020
Время: 06:00
Температура: 19
Минимальная температура: 19
Максимальная температура: 20
Чувствуется как: 18
Влажность: 75
Давление: 1011
Статус: облачно с прояснениями
Скорость ветра: 4.38

Время: 09:00
Температура: 22
Минимальная температура: 22
Максимальная температура: 23
Чувствуется как: 18
Влажность: 
Давление: 1011
Статус: небольшая облачность
Скорость ветра: 6.12

и так далее...

Суть в том, что мне не удается сгруппировать данные о погоде по времени в дату и отдать в сообщение.

UPD: удалось сгруппировать, однако данные о погоде дублируются

Мой код:

sorted_data = sorted(forecast_information,
                         key=lambda d: (datetime.strptime(d['date'], '%d.%m.%Y'), d['time']))
    finish_data = list()
    weather_data = list()
    for i in sorted_data:
        if i['date'] not in finish_data:
            finish_data.append(i['date'])
        weather_data.append({'time': i['time'],
                             'current_temp': int(i['current_temp']),
                             'feeling': int(i['feeling']),
                             'min_temp': int(i['min_temp']),
                             'max_temp': int(i['max_temp']),
                             'humidity': i['humidity'],
                             'pressure': i['pressure'],
                             'detailed_status': i['detailed_status'],
                             'icon': i['icon'],
                             'speed': i['speed']})
    
    forecast_data = ''
    
    for item in finish_data:
        forecast_data += f"""
*Дата: {item}*\n"""
        for n in weather_data:
            forecast_data += f"""
Время: {n['time']}
Температура: {str(n['current_temp'])}\n"""
    
    bot.edit_message_text(chat_id=call.message.chat.id,
                          text=forecast_data,
                          message_id=call.message.message_id,
                          parse_mode="Markdown")

Прошу помочь с решением вопроса. Я понимаю, что вероятно есть проблема со структурами данных.


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

Автор решения: 5c0rp

Группировать ничего не нужно) Возьмите lst_input из вашего прошлого вопроса. Так же нужно не много переделать мой код, а именно:

sorted_data = sorted(lst_input, key=lambda i: (i['date'][:10], i['time']))
def create_message(data):
    out = ''
    temp = set()
    for i in data:
        if i['date'][:10] not in temp:
            out += f'Дата: {i["date"][:10]}\n'
            temp.add(i["date"][:10])
        out += f'Время: {i["time"]}\n'
        out += f'Температура: {int(i["max_temp"])}\n'
        out += f'Влажность: {int(i["humidity"])}\n'
        out += f'Статус: {i["detailed_status"]}\n'
        out += f'Скорость ветра: {i["speed"]}\n\n'
        '''Добавьте, по аналогии, нужные вам данные'''

message = create_message(sorted_data)

'''Тут код который отправляет сообщение'''
→ Ссылка