首页 > 解决方案 > 获取字典的缺失日期

问题描述

我有下一本字典,我需要获取确定时期之间的缺失时期,换句话说,获取一个时期的结束日期和下一个时期的开始日期之间的时期。

{'0': {'enddate': u'2017/05/25',
       'startdate': u'2017/05/01'},
 '1': {'enddate': u'2017/09/30',
       'startdate': u'2017/06/01'},
 '2': {'enddate': u'2018/03/31',
       'startdate': u'2018/01/01'},
 '3': {'enddate': u'2019/02/28',
       'startdate': u'2018/05/01'}}

我不确切知道如何存储丢失的日期。我想存储它的最佳选择可能是在另一个字典中。所以我需要另一个字典,基于我发布的示例,如下所示:

{'0': {'enddate': u'2017/05/26',
       'startdate': u'2017/05/31'},
 '1': {'enddate': u'2017/12/31',
       'startdate': u'2017/10/01'},
 '2': {'enddate': u'2019/03/30',
       'startdate': u'2018/04/01'}'

获取这个 dict 的函数很简单:

def periods(periods):

    total_periods={}
    for period in periods:
        total_periods[period] = {}
        for  startdate in periods[period][0]:
            total_periods[period]['startdate'] = startdate
        for enddate in periods[period][-1]:
            total_periods[period]['enddate'] = enddate

这个函数的输入是另一个函数,它在目录树中重新收集所有日期。问题是我不知道该怎么做,我尝试了在这里找到的不同选项,但没有成功......我将不胜感激任何帮助或指导开始......希望我能正确和清楚地解释。

此致。

标签: pythondictionary

解决方案


尝试

import datetime
import pprint

data = {'0': {'enddate': u'2017/05/25',
              'startdate': u'2017/05/01'},
        '1': {'enddate': u'2017/09/30',
              'startdate': u'2017/06/01'},
        '2': {'enddate': u'2018/03/31',
              'startdate': u'2018/01/01'},
        '3': {'enddate': u'2019/02/28',
              'startdate': u'2018/05/01'}}

start = 1
output = dict()
while True:
    entry_1 = data.get(str(start - 1), None)
    entry_2 = data.get(str(start), None)
    if entry_1 is None or entry_2 is None:
        break
    else:
        start_date = datetime.datetime.strptime(entry_2['startdate'], '%Y/%M/%d')
        end_date = datetime.datetime.strptime(entry_1['enddate'], '%Y/%M/%d')
        output['{}-{}'.format(start, start - 1)] = {'start': str(start_date), 'end': str(end_date),
                                                    'delta': str(end_date - start_date)}
        start += 1
pprint.pprint(output)

输出

{'1-0': {'delta': '23 days, 23:59:00',
         'end': '2017-01-25 00:05:00',
         'start': '2017-01-01 00:06:00'},
 '2-1': {'delta': '-336 days, 0:08:00',
         'end': '2017-01-30 00:09:00',
         'start': '2018-01-01 00:01:00'},
 '3-2': {'delta': '29 days, 23:58:00',
         'end': '2018-01-31 00:03:00',
         'start': '2018-01-01 00:05:00'}}

推荐阅读