【问题标题】:How to add two maps of hours and minutes and add them in python [duplicate]如何添加两个小时和分钟的地图并在python中添加它们[重复]
【发布时间】:2022-01-18 22:53:35
【问题描述】:

所以我有两个持续时间的字典:

a = {hours: 13, minutes: 23}
b = {hours: 23, minutes: 42}

我想把它们加在一起,所以最终的输出是:

{hours: 37, minutes: 5}

是否有任何 python 内置库可以帮助我做到这一点,还是我必须编写自己的函数?

【问题讨论】:

  • 他们每个人都只有这两个键吗?
  • 大约 3 行代码。编写它比搜索库要快。 datetime 模块可以进行增量添加,但您必须转换为它们的格式。

标签: python python-3.x python-2.7 timedelta


【解决方案1】:

dict 值转换为datetime.timedelta 值很简单,之后您可以轻松添加它们。

>>> from datetime import timedelta
>>> timedelta(**a) + timedelta(**b)
datetime.timedelta(days=1, seconds=47100)

将总和转换回 dict 并不是那么简单,但仍然很容易。

>>> x = timedelta(**a) + timedelta(**b)
>>> dict(zip(("hours", "minutes"), divmod(int(x.total_seconds())//60, 60)))
{'hours': 37, 'minutes': 5}
  1. 将总秒数转换为分钟数
  2. 将分钟转换为小时和分钟
  3. 使用字符串"hours""minutes" 压缩以创建 适合传递给dict 的元组序列。

【讨论】:

    【解决方案2】:

    字典键必须是可散列的,所以让我们将它们设为字符串。然后,将其分解为简单的步骤:

    a = {'hours': 13, 'minutes': 23}
    b = {'hours': 23, 'minutes': 42}
    
    def add_times(a, b):
        m = a['minutes'] + b['minutes']
        h = (0 if m < 60 else 1) + a['hours'] + b['hours']
        return {'hours': h, 'minutes': m % 60}
    
    print(add_times(a, b))
    

    输出:

    {'hours': 37, 'minutes': 5}
    

    【讨论】:

    • @Mandera 哎呀。谢谢你。已编辑
    【解决方案3】:

    这是一个解决方案,它首先将所有时间字典相加,然后从分钟值开始移动任何额外的小时。

    def sum_times(*time_dicts):
        summed = {key: sum(d[key] for d in time_dicts) for key in time_dicts[0]}
        summed["hours"] += summed["minutes"] // 60
        summed["minutes"] %= 60
        return summed
    

    用你的例子

    a = {"hours": 13, "minutes": 23}
    b = {"hours": 23, "minutes": 42}
    
    print(sum_times(a, b))
    
    {'hours': 37, 'minutes': 5}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多