Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据日期对日期进行分组?_Python - Fatal编程技术网

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 comprehensive
date\u list=(…)
,您可以使用普通字典和
res.setdefault((date-startdate).days+1,[])。append(str(date))
@CharifDZ同意生成器表达式(取决于对这些日期还需要做什么)。但是我更喜欢
defaultdict
而不是
setdefault
(我模糊地记得它更有效…)。