在python中,当行与列表匹配时添加两个日期时间对象

在python中,当行与列表匹配时添加两个日期时间对象,python,list,python-3.x,time,strip,Python,List,Python 3.x,Time,Strip,我有一个由以下数据组成的列表: data1_part1 data1_part2 -> 1:02:04 data2_part1 data2_part2 -> 0:01:01 data3_part1 data3_part3 -> 1:01:02 data2_part1 data2_part2 -> 1:02:01 在这种情况下,我希望输出为 data1_part1 data1_part2 -> 1:02:04 data3_part1 data3_part3 ->

我有一个由以下数据组成的列表:

data1_part1 data1_part2 -> 1:02:04
data2_part1 data2_part2 -> 0:01:01
data3_part1 data3_part3 -> 1:01:02
data2_part1 data2_part2 -> 1:02:01
在这种情况下,我希望输出为

data1_part1 data1_part2 -> 1:02:04
data3_part1 data3_part3 -> 1:01:02
data2_part1 data2_part2 -> 1:03:02
如果在列表中已找到数据部件,则累加时间,否则按原样打印

迄今为止的代码:

但这并没有打印出我所期望的答案,因为我发现执行没有进入

for z in range(0,len(searched_val)):

我猜第一部分,即->之前的字符串值无法匹配。我真的不知道为什么。

您的代码不起作用的原因是,您从未实际更新搜索值中的元素,而这又是因为您的if检查失败:您正在检查列表中字符串的子字符串。这是行不通的:

>>> l = ['hello 11', 'world 22']
>>> 'hello' in l  # substring in list?
False
>>> 'hello 11' in l  # full element in list?
True
下面给出了一个更具python风格的解决方案。它使用字典。注意,我使用的是来自的defaultdict,我觉得它在这里更有用

>>> from collections import defaultdict
>>> from datetime import datetime
>>> 
>>> # First, generate a list of strings, similar to yours
... U = """data1_part1 data1_part2 -> 1:02:04
... data2_part1 data2_part2 -> 0:01:01
... data3_part1 data3_part3 -> 1:01:02
... data2_part1 data2_part2 -> 1:02:01""".split('\n')  
>>> 
>>> unix_epoch = datetime(1900,1,1)
>>> coll = defaultdict(lambda: unix_epoch)
>>> for row in U:
...     key, timing = row.split(' -> ')
...     coll[key] += (datetime.strptime(timing, "%H:%M:%S") - unix_epoch)
... 
>>> for k,v in coll.items():
...     print("{} -> {}".format(k, v.strftime("%H:%M:%S")))
... 
data2_part1 data2_part2 -> 01:03:02
data1_part1 data1_part2 -> 01:02:04
data3_part1 data3_part3 -> 01:01:02

重要的是要认识到,此代码或其结果的解释受到时间溢出的影响:当您将2个小时的时间加总到某个已经有23小时时间指示的项目时,代码将正确跳转到第二天,但仅显示01小时。根据我自己的经验,,我只能建议尽早将时间戳更改为full timing indications=date+time。

打印val和searched_val并检查其中的值如何?@Ashalynd我尝试过的问题是,searched_val中的strval:在searched_val中找不到子字符串val。最终的print语句将打印所有需要的内容在输入中,这意味着语句没有进入范围0中的for z,lensearched_val:并且时间没有加起来。数据x part_y行的显示顺序是否重要?否则,使用字典会容易得多。@OliverW。顺序不重要,只需要添加时间。你能给我一个例子,如何在另一个系统中实现它吗way@user3703782我已经给了你一个例子,并解释了为什么你的代码不起作用。答案不清楚吗?如果你需要更多的澄清,你可以在评论中要求他们。
>>> from collections import defaultdict
>>> from datetime import datetime
>>> 
>>> # First, generate a list of strings, similar to yours
... U = """data1_part1 data1_part2 -> 1:02:04
... data2_part1 data2_part2 -> 0:01:01
... data3_part1 data3_part3 -> 1:01:02
... data2_part1 data2_part2 -> 1:02:01""".split('\n')  
>>> 
>>> unix_epoch = datetime(1900,1,1)
>>> coll = defaultdict(lambda: unix_epoch)
>>> for row in U:
...     key, timing = row.split(' -> ')
...     coll[key] += (datetime.strptime(timing, "%H:%M:%S") - unix_epoch)
... 
>>> for k,v in coll.items():
...     print("{} -> {}".format(k, v.strftime("%H:%M:%S")))
... 
data2_part1 data2_part2 -> 01:03:02
data1_part1 data1_part2 -> 01:02:04
data3_part1 data3_part3 -> 01:01:02