Python函数仅返回首行数据问题及字典DRY优化需求
Launch数据处理函数:返回问题修复与DRY优化
原问题
编写的create_launch_data函数预期读取文件并转换为字典列表后返回完整数据,但实际仅能打印每行数据,无法返回完整列表;同时字典构建方式重复冗余,不符合DRY(Don't Repeat Yourself)原则。
原代码问题拆解
- 无返回逻辑:函数没有
return语句,调用后无法获取处理结果;且未初始化列表存储所有行数据,每次循环会覆盖字典变量,仅能临时打印当前行。 - 冗余处理:
line.splitlines()属于多余操作,for line in f已经实现逐行读取,line本身就是单行内容。 - 字典构建重复:手动逐个编写键值对,代码冗余,字段调整时需修改多处,易出错。
优化后的代码
def create_launch_data(filename): # 定义与文件列对应的字段名列表 field_names = [ "launch_success", # 修正原拼写错误:launch_succes → launch_success "launch_site", "mission_name", "launch_year", "rocket", "video_link", "launch_date", "ship_name" ] launch_data = [] # 初始化列表存储所有处理后的字典 with open(filename, "r") as f: for line in f: line_content = line.strip() if not line_content: # 跳过空行,避免无效数据 continue data_items = line_content.split(",") # 用zip配对字段名与数据,一键生成字典 launch_dict = dict(zip(field_names, data_items)) # 转换数据类型,让数据更规范 launch_dict["launch_success"] = launch_dict["launch_success"] == "True" launch_dict["launch_year"] = int(launch_dict["launch_year"]) launch_data.append(launch_dict) return launch_data # 调用示例 full_launch_data = create_launch_data("spacex_data.txt") # 打印验证结果 for item in full_launch_data: print(item)
核心优化点
- DRY原则落地:通过
field_names列表结合zip批量构建字典,新增或修改字段只需调整列表,无需重复编写键值对。 - 完整数据返回:用
launch_data列表收集所有行生成的字典,最后返回整个列表,满足函数预期功能。 - 数据类型规范:将字符串类型的
launch_success转为布尔值、launch_year转为整数,让数据更符合实际业务逻辑。 - 鲁棒性增强:添加
strip()去除换行符,跳过空行,避免处理无效数据。 - 拼写错误修正:修正原字典键名的拼写错误,保证数据键名的准确性。
内容的提问来源于stack exchange,提问作者SmugSnail
相关产品推荐
相关产品推荐

