Создайте пару ключей и значений словаря из вложенных значений JSON

#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] = часы[‘время’]