Как изменить код Python, чтобы он работал правильно - PullRequest
0 голосов
/ 01 февраля 2020

Мне нужна помощь. У меня есть словарь, который представляет данные измерений в течение 8 дней каждые 15 минут, но некоторые измерения отсутствуют. Ключи являются объектами даты и времени:

datetime(year, month, date, hour, minute)

, а значения представляют измеряемый параметр. Моя цель - получить новый словарь с ключами, которые представляют только время суток, например:

time(hour, minute)

, а его значения представляют собой списки измерений, которые предоставлялись в одно и то же время каждый день. Итак, вместо первого словаря длины L я хочу получить новый словарь длины L / 8, где каждое значение представляет собой список из 8 чисел (иногда меньше, если в один или два дня пропущено значение). Для меня это очень простая проблема, если пропущенных значений нет, но при пропущенных значениях моя программа возвращает странный результат. Если кто-то может дать идею, было бы здорово! Вот мой код (te c - мой начальный словарь):

time_of_day = []
date = datetime(2020, 1, 13, 0, 0)
while date < datetime(2020, 1, 14, 0, 0):
    time_of_day.append(date)
    date = date + td(minutes = 15)
day_tec = dict.fromkeys(time_of_day, [])
for i in day_tec.keys():
    j = 0
    while j < 8:
        try:
            day_tec[i].append(tec[i + j * timedelta(days = 1)])
        except Exception as e:
            print(e)
            pass
        j = j + 1

print(day_tec)

print (day_te c) возвращает словарь с объектами datetime в качестве ключей от datetime (2020, 1, 13, 0, 0) до datetime (2020, 1, 14, 0, 0) каждые 15 минут, но его значения являются списками, длина которых равна начальной длине словаря.

1 Ответ

0 голосов
/ 01 февраля 2020

Вы можете использовать defaultdict, чтобы получить то, что вы хотите. Приведенный ниже код даст вам словарь, в котором каждая клавиша является кортежем часов и минут, а каждое значение является записанным значением в tec dict.

from collections import defaultdict

day_tec = defaultdict(list)
for dt, value in tec.items():
    tm = (dt.hour, dt.minute)
    day_tec[tm].append(value)
print(day_tec)
...