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
相关产品推荐
相关产品推荐

