计算字典中日期之间的平均时间

2024-04-25 04:24:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算(排序的、不同的)日期之间的平均时间。这些日期存储在列表中,列表作为值保存在字典中(键是唯一标识符),如下所示:

my_dict = {'001':[datetime.date(2014, 7, 29), datetime.date(2014, 8, 1), datetime.date(2014, 8, 5), datetime.date(2014, 8, 13)], '002':[datetime.date(2014, 7, 29), datetime.date(2014, 8, 1), datetime.date(2014, 8, 5), datetime.date(2014, 8, 13)]...}

以下是我为此编写的代码:

for j,k in dicts.items():
    for i in range(0,len(k)):
        y = timedelta(days=0)
        x = k[i] - k[i-1]
        y = y + x
        n = len(k)
        score = y/n
        dicts.update({j:score})

然而,当我将得到的值与数据进行比较时,它们似乎不正确,但我不确定为什么会这样。有人能告诉我我做错了什么吗

编辑:不正确的意思是平均值不正确。例如,10008吐出“10008”:datetime.timedelta(天=33,秒=57600)。但这一日期分别为2012年11月25日、2013年3月30日和2013年7月9日,相隔33天以上


Tags: in列表fordatetimedatelen字典排序
3条回答

首先,时间上的平均差距等于第一个和最后一个差距除以差距数量。因此,如果你不需要其他任何东西,只需使用第一个和最后一个分开的区间数。例如,如果你有7/10、7/20和7/30,你的平均间隔是10天。如果你将7/20改为7/12,你平均还有10天的时间

除此之外,如果您在工作时需要其他数据,以下是正确的循环:

my_dict = {'001':[datetime.date(2014, 7, 10), datetime.date(2014, 7, 20), datetime.date(2014, 7, 30)], '002':[datetime.date(2014, 7, 29), datetime.date(2014, 8, 1), datetime.date(2014, 8, 5), datetime.date(2014, 8, 23)]}
import datetime
for j,k in my_dict.items():
    y = datetime.timedelta(days=0)  # need to move outside of loop so you can increment y
    for i in range(1, len(k)):  # need to skip first one to only measure intervals
        x = k[i] - k[i-1]
        y += x
        n = len(k) - 1
        score = y/n
        my_dict.update({j:score})
print(my_dict)

我想你可以通过改变这一行来解决这个问题:

for i in range(0,len(k)):

关于这一行:

for i in range(1,len(k)):

这是因为在第一次遍历第二个嵌套for循环中的代码时,此行x = k[i] - k[i-1]将产生x = k[0] - k[-1],这将计算列表中第一项和最后一项之间的差异。而我认为你想做的是计算列表中第一项和第二项之间的差异

但是如果您按照建议更改代码,那么第一行将计算为x = k[1] - k[0],我认为这就是您想要的

我看到了一个潜在的问题。从i=0开始,当有x = k[i]- k[i-1]时,从第一个元素减去最后一个元素。这将导致负值。您可以使用abs()函数来修复此问题

您可以改为使用while循环:

i = len(k) - 1
while i >= 0:
    # Insert rest of code
    i -= 1

相关问题 更多 >