gpt4 book ai didi

Python 比较日期范围列表

转载 作者:行者123 更新时间:2023-12-01 04:51:02 26 4
gpt4 key购买 nike

我有一个包含日期的列表:

dates = [
{'start': 2015-02-12 08:30, 'end': 2015-02-12 13:30, 'name': 'a'},
{'start': 2015-02-12 09:00, 'end': 2015-02-12 11:45, 'name': 'b'},
{'start': 2015-02-12 09:30, 'end': 2015-02-12 10:30, 'name': 'c'},
{'start': 2015-02-12 10:30, 'end': 2015-02-12 17:30, 'name': 'd'},
{'start': 2015-02-12 11:00, 'end': 2015-02-12 20:30, 'name': 'e'},
{'start': 2015-02-12 12:30, 'end': 2015-02-12 18:30, 'name': 'f'},
]

我需要像这样获得输出(将这些日期合并到间隔):

output = [
{'start': 2015-02-12 08:30, 'end': 2015-02-12 09:00, 'name': 'a'},
{'start': 2015-02-12 09:00, 'end': 2015-02-12 09:30, 'name': 'a + b'},
{'start': 2015-02-12 09:30, 'end': 2015-02-12 10:30, 'name': 'a + b + c'},
{'start': 2015-02-12 10:30, 'end': 2015-02-12 11:00, 'name': 'a + b + d'},
{'start': 2015-02-12 11:00, 'end': 2015-02-12 11:45, 'name': 'a + b + d + e'},
{'start': 2015-02-12 11:45, 'end': 2015-02-12 12:30, 'name': 'a + d + e'},
{'start': 2015-02-12 12:30, 'end': 2015-02-12 13:30, 'name': 'a + d + e + f'},
{'start': 2015-02-12 13:30, 'end': 2015-02-12 17:30, 'name': 'd + e + f '},
{'start': 2015-02-12 17:30, 'end': 2015-02-12 18:30, 'name': 'e + f'},
{'start': 2015-02-12 18:30, 'end': 2015-02-12 20:30, 'name': 'f'},
]

如果其中一项开始结束 日期交叉,则每个输出开始结束 日期必须按顺序排列它们应该相互合并。

我试图使用循环中的循环

for x, left in enumerate(dates):
for y, right in enumerate(dates):
# HERE GOES THE LOGIC..
# Tried to compare each X and Y item with each other
# But don't know how to keep used items "in mind"
# And then create new list to output
continue

但是没有找到解决这个问题的方法。我正在等待帮助答案,谢谢。

最佳答案

尝试这样:

date_ranges = [
{'start': '2015-02-12 08:30', 'end': '2015-02-12 13:30', 'name': 'a'},
# Omitting...
{'start': '2015-02-12 12:30', 'end': '2015-02-12 18:30', 'name': 'f'},
]

edges = set()
for date_range in date_ranges:
edges.add(date_range['start'])
edges.add(date_range['end'])
edges = sorted(list(edges))

intervals = []
for i, edge in enumerate(edges):
if i == 0:
continue
previous_edge = edges[i - 1]
current_edge = edge
overlaps = [date_range['name']
for date_range in date_ranges
if date_range['start'] <= previous_edge and
current_edge <= date_range['end']]
if overlaps:
interval = {
'name': ' + '.join(sorted(overlaps)),
'start': previous_edge,
'end': current_edge
}
intervals.append(interval)

for interval in intervals:
print interval

输出:

{'start': '2015-02-12 08:30', 'end': '2015-02-12 09:00', 'name': 'a'}
{'start': '2015-02-12 09:00', 'end': '2015-02-12 09:30', 'name': 'a + b'}
{'start': '2015-02-12 09:30', 'end': '2015-02-12 10:30', 'name': 'a + b + c'}
{'start': '2015-02-12 10:30', 'end': '2015-02-12 11:00', 'name': 'a + b + d'}
{'start': '2015-02-12 11:00', 'end': '2015-02-12 11:45', 'name': 'a + b + d + e'}
{'start': '2015-02-12 11:45', 'end': '2015-02-12 12:30', 'name': 'a + d + e'}
{'start': '2015-02-12 12:30', 'end': '2015-02-12 13:30', 'name': 'a + d + e + f'}
{'start': '2015-02-12 13:30', 'end': '2015-02-12 17:30', 'name': 'd + e + f'}
{'start': '2015-02-12 17:30', 'end': '2015-02-12 18:30', 'name': 'e + f'}
{'start': '2015-02-12 18:30', 'end': '2015-02-12 20:30', 'name': 'e'}

关于Python 比较日期范围列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28472917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com