首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从两个列表中创建一个字典,同时保持几天在一起?

如何从两个列表中创建一个字典,同时保持几天在一起?
EN

Stack Overflow用户
提问于 2019-08-09 22:57:32
回答 3查看 81关注 0票数 0

我有一个日期列表和一个时间列表。当小时属于不同的第二天时(因此,当一个时间小于前一个时间时),我如何创建一个以键为日期、以时间为值、以下一个日期为键的字典?这两个列表当前都是字符串。

我的日期列表:

代码语言:javascript
运行
复制
['2019/07/27',
 '2019/07/29',]

我的次数列表:

代码语言:javascript
运行
复制
['06:55:40',
 '06:55:41',
 '08:48:33',
 '08:48:33',
 '09:02:54',
 '09:02:54',
 '09:02:54',
 '10:02:19',
 '10:02:20',
 '07:34:52',
 '07:34:52',
 '07:35:03',
 '09:22:19',
 '09:22:19',
 '09:22:19',
 '09:22:23',
 '11:17:24',
 '11:17:27',
 '13:24:57',]

预期输出:

代码语言:javascript
运行
复制
{'2019/07/27': ['06:55:40',
                '06:55:41',
                '08:48:33',
                '08:48:33',
                '09:02:54',
                '09:02:54',
                '09:02:54',
                '10:02:19',
                '10:02:20',],
 '2019/07/29': ['07:34:52',
                '07:34:52',
                '07:35:03',
                '09:22:19',
                '09:22:19',
                '09:22:19',
                '09:22:23',
                '11:17:24',
                '11:17:27',
                '13:24:57',]}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-09 23:07:03

代码语言:javascript
运行
复制
time_groups = []
grp = []
previous_time = None
for time in times:
    if previous_time is None or time > previous_time:
        grp.append(time)
    else:
        time_groups.append(grp)
        grp = []
    previous_time = time

output = {d:t for d,t in zip(dates,time_groups)}
票数 2
EN

Stack Overflow用户

发布于 2019-08-09 23:35:36

您可以使用此函数执行此操作。如果为了进行比较而将它们转换为datetime对象,则会更容易:

代码语言:javascript
运行
复制
from datetime import datetime as dt

def sort_dates(ds, ts):
    limit = dt.strptime("23:59:59", "%H:%M:%S").time()
    res = {}
    i = -1

    for time in ts:
        current = dt.strptime(time, "%H:%M:%S").time()
        if current < limit:
            i+=1
            res[ds[i]] = []
        res[d[i]].append(time)   
        limit = current    

    return res

d = ['2019/07/27', '2019/07/29']
t = ['06:55:40', '06:55:41', '08:48:33', '08:48:33', '09:02:54', '09:02:54', '09:02:54', '10:02:19', '10:02:20', '07:34:52', '07:34:52', '07:35:03', '09:22:19', '09:22:19', '09:22:19', '09:22:23', '11:17:24', '11:17:27', '13:24:57']
res = sort_dates(d, t)
票数 1
EN

Stack Overflow用户

发布于 2019-08-10 00:40:53

我的解决方案如下。我把时间列表切开了。

代码语言:javascript
运行
复制
i = 1
j = 0
length = len(times)
while i < length:
    if times[i-1] > times[i] or i is length-1: # i is the index of the start time on the next day
        dict[dates[j]] = times[:i]
        times = times[i:]
        j += 1
        i = 1
        length = len(times)
    else:
        i += 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57432663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档