我有下一本字典,我需要获取确定期间之间的缺失期,换句话说,获取一个期间的结束日期与下一个开始日期之间的期间。
while
我不确切地知道如何存储丢失的日期。.我猜最好将其存储在另一本词典中。.因此,根据我发布的示例,我需要另一个字典,像这样:
{'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'}'
此函数的输入是另一个函数,它识别目录树中的所有日期。 问题是我不知道该怎么做,我尝试了在这里找到的其他选项,但没有成功...希望获得帮助或指导以开始... 希望我能正确,清楚地解释。
最诚挚的问候。
答案 0 :(得分:0)
只需一个for
循环即可尝试:
from datetime import datetime, timedelta
result = {}
for k,v in d.items(): # d is your input times
n= str(int(k)+1)
if n in d:
result[f'{k}-{n}'] = {'start':datetime.strftime(datetime.strptime(d[k]['enddate'], '%Y/%m/%d')+timedelta(days=1),'%Y/%m/%d'), 'end':datetime.strftime(datetime.strptime(d[n]['startdate'], '%Y/%m/%d')-timedelta(days=1),'%Y/%m/%d')}
结果将是:
{'0-1': {'start': '2017/05/26', 'end': '2017/05/31'},
'1-2': {'start': '2017/10/01', 'end': '2017/12/31'},
'2-3': {'start': '2018/04/01', 'end': '2018/04/30'}}
如果您未使用Python3.6
或更高版本,请将f'{k}-{n}'
更改为'{}-{}'.format(k,n)
。
答案 1 :(得分:0)
一些粗略的想法:
datetime.strptime
start_date
作为键,并将end_date
和start_date
之间的差值存储为值(后者是datetime.timedelta
对象)答案 2 :(得分:0)
尝试
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'}}