首页 > 解决方案 > 如何更改 Python 代码以使其正常工作

问题描述

我需要一些帮助。我有一本字典,它表示每 15 分钟 8 天的测量数据,但缺少一些测量数据。键是日期时间对象:

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

和数值代表测量参数。我的目标是获得一个带有键的新字典,它只代表一天中的时间,例如:

time(hour, minute)

它的值是每天同一时间提供的测量值列表。因此,我想获得长度为 L/8 的新字典,而不是长度为 L 的第一个字典,其中每个值都是 8 个数字的列表(如果在一两天内缺少值,有时会更少)。这对我来说是一个非常简单的问题,如果没有缺失值,但是缺失值我的程序会返回一些奇怪的结果。如果有人可以提供一个想法,那就太好了!这是我的代码(tec 是我的初始字典):

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_tec) 每 15 分钟返回以 datetime 对象为键的字典,从 datetime(2020, 1, 13, 0, 0) 到 datetime(2020, 1, 14, 0, 0) ,但它的值是相同的列表长度作为初始字典长度。

标签: pythonlistdatetimefor-loop

解决方案


你可以使用 adefaultdict来得到你想要的。下面的代码将为您提供一个字典,其中每个键是小时和分钟的元组,每个值是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)

推荐阅读