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

Python函数仅返回首行数据问题及字典DRY优化需求

Launch数据处理函数:返回问题修复与DRY优化

原问题

编写的create_launch_data函数预期读取文件并转换为字典列表后返回完整数据,但实际仅能打印每行数据,无法返回完整列表;同时字典构建方式重复冗余,不符合DRY(Don't Repeat Yourself)原则。

原代码问题拆解

  1. 无返回逻辑:函数没有return语句,调用后无法获取处理结果;且未初始化列表存储所有行数据,每次循环会覆盖字典变量,仅能临时打印当前行。
  2. 冗余处理:line.splitlines()属于多余操作,for line in f已经实现逐行读取,line本身就是单行内容。
  3. 字典构建重复:手动逐个编写键值对,代码冗余,字段调整时需修改多处,易出错。

优化后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:15:41