Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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_Python 3.x_Dictionary_Time - Fatal编程技术网

Python 如何将各个键值添加到一起?

Python 如何将各个键值添加到一起?,python,python-3.x,dictionary,time,Python,Python 3.x,Dictionary,Time,我有一本字典,里面有人和他们完成任务的时间。我也希望加上他们各自的时间 office_time_dict = { "john": ["0:00:30", "0:02:04", "0:00:16"], "bryan": ["0:00:30", "0:02:04", "0:00:16"], "mike&quo

我有一本字典,里面有人和他们完成任务的时间。我也希望加上他们各自的时间

office_time_dict = {
    "john": ["0:00:30", "0:02:04", "0:00:16"],
    "bryan": ["0:00:30", "0:02:04", "0:00:16"],
    "mike": ["0:00:30", "0:02:04", "0:00:16"],
}
total_time = 0

for k, v in office_time_dict.items():
    office = office_time_dict[k]
    for time in office:
        timeparts = [int(s) for s in time.split(":")]
        total_time += (timeparts[0] * 60 + timeparts[1]) * 60 + timeparts[2]
    total_time, sec = divmod(total_time, 60)
    hr, min = divmod(total_time, 60)
    print("%d:%02d:%02d" % (hr, min, sec))
电流输出:0:02:50,0:02:52,0:02:52

对我做错了什么感到困惑,因为john、bryan和mike的所有输出都应该相同,但bryan和mike在2秒钟内关闭

office_time_dict = {'john': ['0:00:30', '0:02:04','0:00:16'], 'bryan': ['0:00:30', 
                   '0:02:04','0:00:16'], 'mike' : ['0:00:30', '0:02:04','0:00:16']}

for person in office_time_dict:
    office = office_time_dict[person]
    total_time = 0 # re-initialise total_time for each person inside loop
    for time in office:
        timeparts = [int(s) for s in time.split(':')]
        total_time += (timeparts[0] * 60 + timeparts[1]) * 60 + timeparts[2]
    total_time, sec = divmod(total_time, 60)
    hr, min = divmod(total_time, 60)
    print('%d:%02d:%02d' % (hr, min, sec))

如果将HH:MM:SS分解为秒,将代码分解为秒,反之亦然,则会有更好的时间:

# Convert a h:m:s string to seconds
def hms_to_sec(hms):
    h, m, s = [int(part, 10) for part in hms.split(":")]
    return h * 60 * 60 + m * 60 + s


# Convert seconds to h:m:s
def sec_to_hms(s):
    hm, s = divmod(s, 60)
    h, m = divmod(hm, 60)
    return "%02d:%02d:%02d" % (h, m, s)


# Source data (slightly modified from question so the guys have different times)
office_time_dict = {
    "john": ["0:00:30", "0:02:04", "0:00:16"],
    "bryan": ["0:00:20", "0:03:04", "0:00:16"],
    "mike": ["0:00:10", "0:04:04", "0:00:16"],
}

# Convert each person's time to seconds and sum up
total_times_sec = {
    person: sum(hms_to_sec(time) for time in times)
    for (person, times) in office_time_dict.items()
}

# Convert the summed seconds back to H:M:S
total_times_hms = {
    person: sec_to_hms(sec) for (person, sec) in total_times_sec.items()
}

# Sum the seconds and convert back to H:M:S
grand_total_hms = sec_to_hms(sum(total_times_sec.values()))

print(total_times_hms)
print(grand_total_hms)
这是打印出来的

{'john': '00:02:50', 'bryan': '00:03:40', 'mike': '00:04:30'}
00:11:00
在主循环之前,变量total_time只初始化一次:

total_time = 0
for k, v in office_time_dict.items():
    total_time = 0
在主循环的每次迭代之后,total_time的值不是0,而是2。 然后将该值添加到命令中

total_time += (timeparts[0] * 60 + timeparts[1]) * 60 + timeparts[2]
如何纠正:

将初始化移动到主循环中:

total_time = 0
for k, v in office_time_dict.items():
    total_time = 0

您只需要在循环中移动total_time的初始化。 您还可以使用items方法返回的值,而不是通过键访问字典

office_time_dict = {'john': ['0:00:30', '0:02:04','0:00:16'],
                    'bryan': ['0:00:30', '0:02:04','0:00:16'],
                    'mike' : ['0:00:30', '0:02:04','0:00:16']}
 
for k, v in office_time_dict.items():
    total_time = 0
    for time in v:
        timeparts = [int(s) for s in time.split(':')]
        total_time += (timeparts[0] * 60 + timeparts[1]) * 60 + timeparts[2]
    total_time, sec = divmod(total_time, 60)
    hr, minutes = divmod(total_time, 60)
    print('%d:%02d:%02d' % (hr, minutes, sec))

每次循环k,v时,必须将total_time的值重置为零。这是导致错误的一行:>它保留[total_time]变量中2的值,并将该值传递给下一个发生此错误的循环。