Python如何从嵌套字典存储的字符串格式datetime中获取最新时间
实现遍历嵌套字典查找最近日期的方案
实现逻辑
- 使用Python标准库
datetime处理日期字符串与时间对象的转换,无需安装第三方依赖 - 遍历两层嵌套字典提取所有日期字符串,按统一格式转为可计算的时间对象
- 计算每个时间对象与当前系统时间的差值绝对值,取差值最小的即为距离当前时间最近的日期
可直接运行的代码
from datetime import datetime # 原始嵌套帖子数据 post_data = { 'reddit': { 'my6vne': '2021-04-25 16:00:02', 'my7uar': '2021-04-25 17:00:02', 'my9i47': '2021-04-25 18:34:09', 'myhq5w': '2021-04-26 01:10:37', 'myioia': '2021-04-26 01:57:58', 'myiout': '2021-04-26 01:58:25', 'myjhtj': '2021-04-26 02:38:51', 'myndga': '2021-04-26 06:16:45', 'myo6x3': '2021-04-26 07:04:48' }, 'twitter': { 'https://twitter.com/twitter/statuses/1386540140068102146': '2021-04-26 04:38:24', 'https://twitter.com/twitter/statuses/1386541987210223618': '2021-04-26 04:45:45', 'https://twitter.com/twitter/statuses/1386542478656827394': '2021-04-26 04:47:42', 'https://twitter.com/twitter/statuses/1386544375086321674': '2021-04-26 04:55:14', 'https://twitter.com/twitter/statuses/1386544515964571648': '2021-04-26 04:55:48' } } # 日期字符串的匹配格式,与存储格式保持一致 DATE_FORMAT = "%Y-%m-%d %H:%M:%S" # 获取当前系统时间 current_time = datetime.now() # 初始化结果存储变量 closest_datetime = None min_gap = None closest_post_meta = None # 遍历嵌套字典 for platform, post_map in post_data.items(): for post_key, date_str in post_map.items(): # 清理日期字符串首尾的多余空白、换行 clean_date = date_str.strip() # 转字符串为可计算的datetime对象 post_datetime = datetime.strptime(clean_date, DATE_FORMAT) # 计算与当前时间的绝对秒数差 time_gap = abs((current_time - post_datetime).total_seconds()) # 更新最小差值对应的结果 if min_gap is None or time_gap < min_gap: min_gap = time_gap closest_datetime = post_datetime closest_post_meta = { "platform": platform, "post_identifier": post_key, "original_date_str": clean_date } # 输出结果 print("最近时间对应的帖子元数据:", closest_post_meta) print("转换后的datetime对象:", closest_datetime)
注意事项
- 时区适配:上述代码默认存储的日期为与当前系统同属一个时区的无时区标记时间。如果存储的日期为UTC时间,需要将
current_time替换为datetime.utcnow(),或给存储的时间对象绑定对应时区后再做差值计算,避免时区偏移导致结果错误。 - 若仅需要最近的日期字符串结果,直接读取
closest_post_meta["original_date_str"]即可。 - 若后续字典存在更深层级的嵌套结构,可将两层遍历逻辑替换为递归遍历,提取所有符合日期格式的字符串值后再对比计算。
内容的提问来源于stack exchange,提问作者nick_rinaldi
相关产品推荐
相关产品推荐

