#python #json #loops
Вопрос:
Я пытаюсь создать словарь, просматривая файл JSON погоды.
Я хочу, чтобы ключом была дата, а значением-температура из вложенных «часов» в JSON.
combined_temperature_hour = {дата, температура}
Когда я просматриваю файл JSON, я могу получить отдельные элементы, но я не могу понять, как захватить два значения и объединить их в пару (ключ, значение).
combined_temperature_hour = {}
for d in days:
for hours in d["hours"]:
hourly = hours.get('datetimeEpoch')
dia_y_hora = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(hourly))
complete_date.append(dia_y_hora)
h_temp = hours.get('temp')
hourly_temperature.append(h_temp)
#combined
combined = {complete_date, hourly_temperature}
print(combined)
JSON
"days":[
{
"datetime":"2021-01-01",
"datetimeEpoch":1609484400,
"tempmax":36.9,
"tempmin":32.4,
"temp":34.7,
"hours":[
{
"datetime":"00:00:00",
"datetimeEpoch":1609484400,
"temp":32.9,
},
{
"datetime":"01:00:00",
"datetimeEpoch":1609488000,
"temp":33.2,
},
{
"datetime":"02:00:00",
"datetimeEpoch":1609491600,
"temp":33.2,
}
]
}
Вот как я хотел бы, чтобы словарь выглядел после цикла
combined_temperature_hour = {`2021-01-24 05:00:00`: '25.1', `2021-01-24 06:00:00`: '26.2'}
Я попытался захватить список для температуры и часа и объединить их в словарь после цикла, но я заметил, что у меня отсутствуют значения, и они, вероятно, являются неправильными парами.
Комментарии:
1. Вы уверены, что хотите, чтобы температура была ключевой? Что делать, если есть несколько раз с одинаковой температурой?
2. Было бы более разумно, чтобы время было ключевым.
3. Это хороший момент. Я не думал о двойных температурах. Я должен был назначить свидание в качестве ключа. Я обновлю свой вопрос, чтобы изменить это. Спасибо тебе @Barmar
4. Это базовая операция со словарем:
combined_temperature_hour[dia_y_hora] = h_temp
Ответ №1:
Сначала прочитайте свой json как словарь в переменную a
(я изменил некоторые несоответствующие скобки в вашем json).
a = {"days":[
{
"datetime":"2021-01-01",
"datetimeEpoch":1609484400,
"tempmax":36.9,
"tempmin":32.4,
"temp":34.7,
"hours":[
{
"datetime":"00:00:00",
"datetimeEpoch":1609484400,
"temp":32.9,
},
{
"datetime":"01:00:00",
"datetimeEpoch":1609488000,
"temp":33.2,
},
{
"datetime":"02:00:00",
"datetimeEpoch":1609491600,
"temp":33.2,
}
]
}
]
}
Затем вы можете получить ожидаемый результат из следующего кода:
combined_temperature_hour = {}
for date in a['days']:
for hour in date['hours']:
combined_temperature_hour[date['datetime'] ' ' hour['datetime']] = hour['temp']
Комментарии:
1. Это сработало, спасибо, но мне пришлось немного изменить код, чтобы он работал на меня. combined_temperature_hour[dia_y_hora] = часы[‘время’]