如何将Python Event类的树形结构完整转换为字典?
如何将树形结构的Event类完整转换为字典?
因为你的m_children是Event实例的列表,直接调用vars()只能获取当前对象的基础属性,子节点仍为对象实例,无法自动递归转换。可以通过以下两种方式实现完整的树形结构转字典:
方法一:编写递归转换函数
定义一个递归函数,遍历每个Event对象,将其属性转为字典的同时,递归处理子节点列表:
def event_to_dict(event): # 手动映射需要导出的属性(对应你的property访问器) event_dict = { 'start': event.start, 'end': event.end, 'name': event.name, 'tId': event.tId, # 递归转换子节点列表 'children': [event_to_dict(child) for child in event.m_children] } return event_dict
如果需要自动适配所有非私有、非方法类的属性(包括后续新增的属性),可以调整为动态遍历:
def event_to_dict(event): event_dict = {} # 遍历对象所有属性,排除私有属性和方法 for attr_name in dir(event): if not attr_name.startswith('_') and not callable(getattr(event, attr_name)): event_dict[attr_name] = getattr(event, attr_name) # 单独处理子节点的递归转换 event_dict['children'] = [event_to_dict(child) for child in event.m_children] return event_dict
方法二:给Event类添加to_dict实例方法
直接在Event类中实现一个to_dict方法,以面向对象的方式完成转换:
class Event: def __init__(self): self.m_children = [] self.m_start = None self.m_end = None self.m_name = None self.m_tId = None @property def start(self): return self.m_start @property def end(self): return self.m_end @property def name(self): return self.m_name @property def tId(self): return self.m_tId def to_dict(self): return { 'start': self.start, 'end': self.end, 'name': self.name, 'tId': self.tId, 'children': [child.to_dict() for child in self.m_children] }
使用时直接调用event_instance.to_dict()即可得到完整的树形字典结构。
内容的提问来源于stack exchange,提问作者jjcasmar
相关产品推荐
相关产品推荐

