python - 获取字典的缺失日期并对其进行排序
问题描述
我有下一本字典,我需要获取确定时期之间的缺失时期,换句话说,获取一个时期的结束日期和下一个时期的开始日期之间的时期。
{'0': {'enddate': u'2015/08/31',
'startdate': u'2015/01/01'},
'1': {'enddate': u'2018/10/31',
'startdate': u'2017/01/01'},
'2': {'enddate': u'2019/03/29',
'startdate': u'2019/01/01'}}
The function who get this data is the next:
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
I have the next code that get the missing periods but i cant to order whith my expect results.
gaps={}
s=[]
e=[]
for i in period:
s.append(datetime.strftime(datetime.strptime(period[i]['enddate'],'%Y/%m/%d')+timedelta(days=1),'%Y/%m/%d'))
e.append(datetime.strftime(datetime.strptime(period[i]['startdate'],'%Y/%m/%d')+timedelta(days=-1),'%Y/%m/%d'))
for i in range(len(s)):
if i==len(s)-1:
break
d={}
d['startdate']=s[i]
d['enddate']=e[i+1]
gaps[str(i)]=d
The output of these code is the next:
{'0': {'enddate': '2014/12/31', 'startdate': '2018/11/01'},
'1': {'enddate': '2018/12/31', 'startdate': '2015/09/01'}}
但这是错误的,因为我需要下一个结果:
{'0': {'enddate': '2016/12/31', 'startdate': '2015/09/01'},
'1': {'enddate': '2018/12/31', 'startdate': '2018/11/01'}}
希望我解释正确和清楚。
提前致谢
解决方案
问题在于这一行:
for i in period:
字典没有排序,因此无法保证在您循环访问这些项目时将按什么顺序访问它们。您的其余代码假定它们将按顺序排列。尝试这个:
for i in sorted(period):
但请注意,如果您有更多元素对字符串进行排序,例如“8”、“9”、“10”、“11”,可能不会满足您的要求。
推荐阅读
- python - 在 macOS 上通过 Python 打开 Excel
- msbuild - 框架与 Visual Studio 中的 Msbuild 版本
- python - 如何将字符串数组分成 2 个单独的部分
- java - Java SWT 浏览器。具有超高清 (4K) 或更高分辨率的屏幕上的不同输出
- python - flask + restful web service 无法运行文本分类模型 + python
- gem5 - 如何在完整的系统 gem5 模拟中获得图形 GUI 输出和用户触摸/键盘/鼠标输入?
- git - 如何在 VSTS 中使用外部 powershell 模块
- database - 在 Laravel Voyager 中创建表时创建迁移文件
- java - 带有 maven intel IDEA 的包不存在 javaFX
- powershell - 如何使用 Get-AnsibleParam,Ansible 中的内置函数