Python中如何控制dataclass转dict的属性顺序以生成指定CSV列序?
解决Dataclass转CSV时保持字段声明顺序的问题
直接用dataclasses.fields()方法就能拿到类声明时的字段顺序,完全不用靠dir()筛选属性,还能轻松复用在不同的dataclass上。
修改后的代码如下:
from dataclasses import dataclass, fields @dataclass class MyClass: c: str b: str a: str = "Default" objdata = [ MyClass(c="Foo", b="Bar"), MyClass(c="Test", b="Test"), MyClass(c="asdf", b="yxcv") ] # 通用转换函数,支持任意dataclass def dataclass_list_to_dict_list(data_list): if not data_list: return [] # 获取第一个对象的字段,严格按类声明顺序 field_names = [field.name for field in fields(data_list[0])] dictdata = [] for entry in data_list: csv_entry = {name: getattr(entry, name) for name in field_names} dictdata.append(csv_entry) return dictdata dictdata = dataclass_list_to_dict_list(objdata)
核心要点:
fields(dataclass_instance)返回的字段列表,完全遵循类中声明的顺序,包含所有定义的字段(不管有没有默认值)。- 封装的通用函数
dataclass_list_to_dict_list,只要传入任意dataclass的列表,就能输出保持字段顺序的字典列表,直接复用即可。 - 相比用
dir()的方式,这个方法更可靠,不会混入dataclass自带的特殊属性,也不用手动过滤前缀。
后续生成CSV时,直接用字典列表的keys作为表头,顺序就是你想要的类声明顺序。
内容的提问来源于stack exchange,提问作者dibade89
相关产品推荐
相关产品推荐

