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

2024-05-19 09:32:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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秒


Tags: infortime时间hrsecminbryan
3条回答

试试这个:

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

主循环每次迭代后,total_time的值不是0,而是2
然后将该值添加到命令中

total_time += (timeparts[0] * 60 + timeparts[1]) * 60 + timeparts[2]

如何纠正:

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

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

相关问题 更多 >

    热门问题