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

Python 2.7下format_data_car函数代码重构求助

重构Python 2.7中的format_data_car函数

我使用Python 2.7编写了一段可正常运行的代码,实现将给定的car_info列表转换为指定格式,但代码较为冗余,希望对其中的format_data_car函数进行重构。相关信息如下:

源数据

car_info =[
    {'car': 'benz1', 'drive_mode': ['electric']},
    {'car': 'benz2', 'drive_mode': ['electric']},
    {'car': 'benz3', 'drive_mode': ['electric']},
    {'car': 'benz4', 'drive_mode': ['petrol']},
    {'car': 'bmw1', 'drive_mode': ['petrol']},
    {'car': 'bmw2', 'drive_mode': ['petrol']},
    {'car': 'bmw3', 'drive_mode': ['petrol']},
    {'car': 'bmw3', 'drive_mode': []}
  ]

所需输出格式

{'electric': ['benz1', 'benz2', 'benz3'], 'petrol': ['benz4', 'bmw1', 'bmw2', 'bmw3']}

现有可运行代码

from collections import defaultdict
# source data:
car_info =[
    {'car': 'benz1', 'drive_mode': ['electric']},
    {'car': 'benz2', 'drive_mode': ['electric']},
    {'car': 'benz3', 'drive_mode': ['electric']},
    {'car': 'benz4', 'drive_mode': ['petrol']},
    {'car': 'bmw1', 'drive_mode': ['petrol']},
    {'car': 'bmw2', 'drive_mode': ['petrol']},
    {'car': 'bmw3', 'drive_mode': ['petrol']},
  {'car': 'bmw3', 'drive_mode': []}
  ]


def format_data_car(car_info):
    car_data = []
    get_values_for_keys = ['car', 'drive_mode']
    for step_name in car_info:
        for key, val in step_name.items():
            step_id_values = dict(filter(lambda item: item[0] in get_values_for_keys, step_name.items())).values()
            car_data.append(step_id_values)
            break
    filter_data = {}
    format_steps_ids = dict(car_data)
    for key, value in format_steps_ids.items():
        filter_data[key] = str(value)[2:-2]
    print(filter_data)
    return filter_data


def testing(source_info):
 d = defaultdict(list)
 for k, v in source_info.items():
  d[v].append(k)
 print(dict(d))


print(testing(format_data_car(car_info)))

重构方案

方案1:优化原函数职责,简化中间步骤

原format_data_car包含大量冗余的字典过滤、列表转换和字符串处理操作,我们可以直接提取所需字段,过滤无效条目,返回清晰的键值对字典:

def format_data_car(car_info):
    car_map = {}
    for entry in car_info:
        car_name = entry['car']
        drive_modes = entry['drive_mode']
        # 仅处理存在有效驱动模式的条目
        if drive_modes:
            car_map[car_name] = drive_modes[0]
    return car_map

调用方式不变,原testing函数可正常处理该返回值,最终得到期望输出。

方案2:合并逻辑,直接生成最终结果

如果希望一步到位生成目标格式,可将format_data_car和testing的逻辑合并,减少函数调用层级:

from collections import defaultdict

def format_data_car(car_info):
    result = defaultdict(list)
    for entry in car_info:
        car_name = entry['car']
        drive_modes = entry['drive_mode']
        # 跳过驱动模式为空的无效条目
        if drive_modes:
            mode = drive_modes[0]
            result[mode].append(car_name)
    # 转换为普通字典,符合输出格式要求
    return dict(result)

此时直接调用print(format_data_car(car_info))即可得到目标结果,无需额外调用testing函数。

重构亮点

  • 移除冗余的嵌套循环、字典过滤和字符串切片操作,逻辑更直接
  • 增加对空驱动模式条目的过滤,避免无效数据干扰
  • 代码行数大幅减少,可读性和维护性显著提升
  • 保留Python 2.7兼容性,无需额外依赖

内容的提问来源于stack exchange,提问作者kumar Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:09:55