删除词典中彼此相隔 'n' 天内的日期



我有一个字典,其中字典的值是日期列表。对于每个键,如果在日期列表中,每个键的日期都在30天内(或更常见的n天(,我只想取最后列出的日期。

例如,我有一本字典如下:

a : ['2020-12-11'] 
b : ['2020-05-30', '2022-09-11'] 
c : ['2021-07-28', '2022-07-20', '2022-07-07', '2022-06-30'] 
d : ['2022-04-17', '2022-04-18', '2022-04-15', '2022-08-20']

现在,由于我只想为每个值取30天内的最后一个列出的日期,我正在尝试获得以下输出:

a : ['2020-12-11'] 
b : ['2020-05-30', '2022-09-11'] 
c : ['2021-07-28', '2022-06-30'] 
d : ['2022-04-15', '2022-08-20']

ab的输出值不变,因为在30天的范围内没有日期。c的输出值发生变化,因为2022-07-202022-07-072022-06-30彼此在30天内,并且由于2022-06-30最后列出,所以它被保留在列表中(尽管2022-07-20在较晚的日期(。对于d,同样的事情也应该发生——2022-04-172022-04-182022-04-15都在30天内,但2022-04-15排在最后,所以我们希望如此,而2022-08-20还有30多天,所以它也保留了下来。

如果有人知道如何帮助我解决这个问题,我会非常感激,因为我不知道如何处理它,尤其是以计算速度快的方式。此外,如何将其概括为60天、100天等。?非常感谢。

只需循环dict,然后循环内部列表,将值转换为datetime,并将其与内部列表中的最后一个值进行比较

test_dict = {
"a" : ['2020-12-11'],
"b" : ['2020-05-30', '2022-09-11'] ,
"c" : ['2021-07-28', '2022-07-20', '2022-07-07', '2022-06-30'] ,
"d" : ['2022-04-17', '2022-04-18', '2022-04-15', '2022-08-20'],
}

from datetime import datetime, timedelta
def only_leave_last_date(d: dict, days_gap:int) -> dict:
new_dict = {}
for key, value in d.items():
if not value:            
new_value_str = []
else:
new_value_dt = [datetime.strptime(value[0], '%Y-%m-%d')]
new_value_str = [value[0]]
for date_str in value[1:]:
date = datetime.strptime(date_str, '%Y-%m-%d')
if abs(date - new_value_dt[-1]) <= timedelta(days=days_gap):
new_value_dt[-1] = date
new_value_str[-1] = date_str
else:
new_value_dt.append(date)
new_value_str.append(date_str)
new_dict[key] = new_value_str
return new_dict
only_leave_last_date(test_dict, days_gap=30)

输出:

{'a': ['2020-12-11'],
'b': ['2020-05-30', '2022-09-11'],
'c': ['2021-07-28', '2022-06-30'],
'd': ['2022-04-15', '2022-08-20']}

相关内容

  • 没有找到相关文章