Объединение значений в словаре по ключу Python
Доброго времени суток!
Есть список словарей:
lst_input = [{'current_temp': 15.54,
'time': '03:00:00',
'date': '31-07-2020',
'detailed_status': 'ясно',
'feeling': 12.99,
'humidity': 77,
'icon': '01d',
'max_temp': 15.54,
'min_temp': 15.54,
'pressure': 1010,
'speed': 4.32,
'status': 'Clear'},
{'current_temp': 18.55,
'time': '06:00:00',
'date': '31-07-2020',
'detailed_status': 'ясно',
'feeling': 15.97,
'humidity': 62,
'icon': '01d',
'max_temp': 18.55,
'min_temp': 18.55,
'pressure': 1009,
'speed': 4.2,
'status': 'Clear'},
{'current_temp': 21.46,
'time': '09:00:00',
'date': '31-07-2020 16:00:00',
'detailed_status': 'небольшой дождь',
'feeling': 17.72,
'humidity': 48,
'icon': '10d',
'max_temp': 21.46,
'min_temp': 21.46,
'pressure': 1009,
'speed': 5.4,
'status': 'Rain'}]
Как видно, это данные прогноза погоды. Здесь данные на каждые 3 часа.
Я хочу сделать список, который объединял бы в себе данные по ключам date - ключ родитель, time - ключ потомок и у time должны собраться остальные ключи и значения, или проще говоря вот так:
lst_output = [{'date': '31-07-2020'}: [{'time': '09:00:00'}:
{'current_temp': 21.46,
'detailed_status': 'небольшой дождь',
'feeling': 17.72,
'humidity': 48,
'icon': '10d',
'max_temp': 21.46,
'min_temp': 21.46,
'pressure': 1009,
'speed': 5.4,
'status': 'Rain'}],
[{'time': '12:00:00'},
{'current_temp': 22.15,
'detailed_status': 'небольшой дождь',
'feeling': 17.97,
'humidity': 42,
'icon': '10d',
'max_temp': 22.15,
'min_temp': 22.15,
'pressure': 1009,
'speed': 5.52,
'status': 'Rain'}]]
Цель (Это конечный формат, для примера):
Дата: 31/07/2020
Время: 03:00
Температура: 15
Влажность: 77
Статус: Дождь
Скорость ветра: 3
Время: 06:00
Температура: 17
Влажность: 61
Статус: Облачно
Скорость ветра: 1,5
Время: 09:00
Температура: 19
Влажность: 52
Статус: Облачно с прояснениями
Скорость ветра: 1
Я новичок в Python и буду благодарен за помощь в решении.
Ответы (1 шт):
Автор решения: 5c0rp
→ Ссылка
Если данные приходят в не отсортированном виде то можно сделать
sorted_data = sorted(lst_input, key=lambda i: (i['date'][:10], i['time']))
key=lambda i: (i['date'][:10], i['time']) сортируем данные сперва по date, а затем по time. Так как в исходных данных ключ date не был одного формата то я грубо обрезал его длину - [:10]
def func(data):
temp = set()
for i in data:
if i['date'][:10] not in temp:
print(f'Дата: {i["date"][:10]}')
temp.add(i["date"][:10])
print(f'Время: {i["time"]}')
print(f'Температура: {int(i["max_temp"])}')
print(f'Влажность: {int(i["humidity"])}')
print(f'Статус: {i["detailed_status"]}')
print(f'Скорость ветра: {i["speed"]}\n\n')
func(sorted_data)