Python 如何根据日期对日期进行分组?
为了简化我的问题,我有如下日期:Python 如何根据日期对日期进行分组?,python,Python,为了简化我的问题,我有如下日期: 2019-10-05 # Day 1 => starting point 2019-10-07 # Day 3 2019-10-07 # Day 3 2019-10-09 # Day 5 2019-10-10 # Day 6 2019-10-10 # Day 6 结果应该是:{1:['2019-10-05'],3:['2019-10-07','2019-10-07'],等等…} 我觉得Python中有一个模块(可能是Collections?)可以解决这个
2019-10-05 # Day 1 => starting point
2019-10-07 # Day 3
2019-10-07 # Day 3
2019-10-09 # Day 5
2019-10-10 # Day 6
2019-10-10 # Day 6
结果应该是:{1:['2019-10-05'],3:['2019-10-07','2019-10-07'],等等…}
我觉得Python中有一个模块(可能是Collections?)可以解决这个问题,但我不知道除了将日期分组在一天中之外,我应该使用什么术语来解决这个问题。在字符串和日期之间进行一定量的转换(繁重的工作)。。。您可以这样做:
from datetime import datetime
from collections import defaultdict
# the date format (for strptime)
fmt = "%Y-%m-%d"
startdate = datetime.strptime('2019-10-05', fmt).date()
# the dates as strings
date_str_list = [
"2019-10-07", # Day 3
"2019-10-07", # Day 3
"2019-10-09", # Day 5
"2019-10-10", # Day 6
"2019-10-10" # Day 6
]
# converting to date objects
date_list = [datetime.strptime(date_str, fmt).date() for date_str in date_str_list]
res = defaultdict(list)
for date in date_list:
res[(date - startdate).days + 1].append(str(date))
print(res)
# defaultdict(<class 'list'>, {3: ['2019-10-07', '2019-10-07'],
# 5: ['2019-10-09'], 6: ['2019-10-10', '2019-10-10']})
从日期时间导入日期时间
从集合导入defaultdict
#日期格式(对于strtime)
fmt=“%Y-%m-%d”
startdate=datetime.strTime('2019-10-05',fmt).date()
#以字符串形式显示日期
日期列表=[
“2019-10-07”,第3天
“2019-10-07”,第3天
“2019-10-09”,第5天
“2019-10-10”,第6天
“2019-10-10”第6天
]
#转换为日期对象
date_list=[datetime.strtime(date_str,fmt).date()表示日期列表中的日期
res=defaultdict(列表)
对于日期列表中的日期:
res[(date-startdate).days+1].追加(str(date))
打印(res)
#defaultdict(,{3:['2019-10-07','2019-10-07'],
# 5: ['2019-10-09'], 6: ['2019-10-10', '2019-10-10']})
我用作容器的地方
两个
date
对象的差异是一个对象.days
给出数据的天数。数据类型是什么?它是文本吗?日期列表?是的,日期列表。使用生成器表达式而不是list comprehensivedate\u list=(…)
,您可以使用普通字典和res.setdefault((date-startdate).days+1,[])。append(str(date))
@CharifDZ同意生成器表达式(取决于对这些日期还需要做什么)。但是我更喜欢defaultdict
而不是setdefault
(我模糊地记得它更有效…)。