Python中如何优雅地从一类对象列表生成另一类对象列表?
优雅将A类对象列表转换为B类对象列表的方法
假设我们定义了两个属性结构一致的类:
class A: x: int y: int class B: x: int y: int
同时有一个A类的对象列表:
a_list = [A(x=1, y=2), A(x=3, y=4), ...]
下面是几种优雅的转换方法:
简洁列表推导式
利用类属性名完全匹配的特点,通过vars()提取A对象的属性字典,直接传给B的构造方法:b_list = [B(**vars(a)) for a in a_list]如果是Python 3.7+的
dataclass,还可以用dataclasses.asdict()更安全地获取属性字典:from dataclasses import asdict b_list = [B(**asdict(a)) for a in a_list]这种方式代码量最少,适合属性结构稳定的场景。
封装转换函数(高可维护性)
如果需要多次转换,或者后续可能调整属性映射逻辑,封装一个转换函数会更清晰:def convert_a_to_b(a_obj: A) -> B: return B(x=a_obj.x, y=a_obj.y) b_list = [convert_a_to_b(a) for a in a_list]这种方式明确展示了属性的对应关系,后续修改属性时更容易定位和调整。
函数式风格的map用法
结合map函数和lambda(或转换函数)实现转换:# 用lambda b_list = list(map(lambda a: B(**vars(a)), a_list)) # 用封装的转换函数 b_list = list(map(convert_a_to_b, a_list))适合偏好函数式编程风格的场景。
内容的提问来源于stack exchange,提问作者ShakaTheUnshakeable
相关产品推荐
相关产品推荐

