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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:22:40