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)
'''Тут код который отправляет сообщение'''