You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pythonic方式计算字典内基准时间戳与其余时间戳差值

Pythonic 字典时间差计算实现

无需多层嵌套循环,用单层字典推导即可高效完成计算,时间复杂度O(n),完全符合Python设计风格。

实现逻辑

  • 直接提取外层键对应内层字典,取出基准键1对应的UTC时间作为基准值
  • 用单层字典推导遍历内层字典剩余键值对,单次计算时间差后格式化输出,无冗余循环
  • 所有带相同时区的datetime对象可直接相减得到准确timedelta差值,无需额外时区转换

完整代码示例

from datetime import datetime, timezone

# 示例输入字典
time_data = {
    'ZLER3B8I': {
        1: datetime(2024, 1, 1, 0, 0, 0, tzinfo=timezone.utc),
        3: datetime(2024, 1, 2, 4, 30, 0, tzinfo=timezone.utc),
        5: datetime(2024, 1, 2, 6, 2, 0, tzinfo=timezone.utc)
    }
}

# 配置参数
OUTER_KEY = 'ZLER3B8I'
BASE_KEY = 1

# 取基准数据
inner_map = time_data[OUTER_KEY]
base_ts = inner_map[BASE_KEY]

# 单层推导生成结果,无嵌套循环
result = {
    (BASE_KEY, k): f"{int(diff.total_seconds() // 3600)} Hrs {int((diff.total_seconds() % 3600) // 60)} mins"
    for k, current_ts in inner_map.items()
    if k != BASE_KEY
    for diff in [current_ts - base_ts]  # 单次计算差值,避免重复运算
}

print(result)
# 输出:{(1, 3): '28 Hrs 30 mins', (1, 5): '30 Hrs 2 mins'}

格式调整说明

如果需要和示例完全一致的(1-3)格式字符串作为键,只需要把字典推导里的键定义替换为f"({BASE_KEY}-{k})"即可,输出结果结构就会变成{'(1-3)': '28 Hrs 30 mins', '(1-5)': '30 Hrs 2 mins'}。

如果需要忽略差值正负只取绝对时间差,把diff计算部分改为abs(current_ts - base_ts)即可。


内容的提问来源于stack exchange,提问作者user591814

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:39:18