如何优化嵌套字典中获取最新日期的Python代码?
代码优化点解析
1. 修复缺失的依赖导入
原代码未导入datetime模块,运行会直接抛出NameError,必须补充导入语句。
2. 移除无意义的日期格式转换
ISO 8601格式的日期字符串(如YYYY-MM-DD)本身可以直接按字符串比较大小,无需先转成datetime对象再转回字符串,属于完全冗余的操作。
3. 简化列表生成逻辑
原代码先通过循环append收集所有值,再二次过滤转换,可以合并成一步完成,减少内存占用和代码行数。
4. 增强边界情况处理
如果所有子字典的forth键值都是None或无效值,调用max()会抛出ValueError,需要添加空值判断,避免程序崩溃。
5. 优化嵌套字典的遍历灵活性
原代码硬编码访问data["first"]["second"],如果字典嵌套层级变化或结构更复杂,代码会直接失效。可以实现递归/迭代的通用遍历方法,自动查找所有嵌套字典中的目标键。
优化后的代码示例
基础优化版本(适配当前固定结构)
import datetime data = { "first": { "second": { "third_1": {"forth": "2022-01-01"}, "third_2": {"forth": None}, "third_3": {"forth": "2021-01-01"}, } } } def get_max_date(data, key): # 直接过滤并收集有效日期字符串 valid_dates = [item.get(key) for item in data.values() if item.get(key)] if not valid_dates: return None # 处理无有效日期的边界情况 return max(valid_dates) out = get_max_date(data=data["first"]["second"], key="forth") print(out) # 输出: 2022-01-01
通用遍历版本(支持任意嵌套字典)
import datetime data = { "first": { "second": { "third_1": {"forth": "2022-01-01"}, "third_2": {"forth": None}, "third_3": {"forth": "2021-01-01"}, "third_4": { "fourth": {"forth": "2023-01-01"} } } } } def collect_all_dates(data, target_key): valid_dates = [] for value in data.values(): if isinstance(value, dict): # 递归遍历嵌套字典 valid_dates.extend(collect_all_dates(value, target_key)) # 检查当前字典是否包含目标键 date_val = value.get(target_key) if date_val: valid_dates.append(date_val) return valid_dates def get_max_date(data, target_key): valid_dates = collect_all_dates(data, target_key) if not valid_dates: return None return max(valid_dates) out = get_max_date(data=data, target_key="forth") print(out) # 输出: 2023-01-01
内容的提问来源于stack exchange,提问作者Blob
相关产品推荐
相关产品推荐

