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
相关产品推荐
相关产品推荐

