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

如何将嵌套字典转为Python对象并递归打印所有子键值对

嵌套字典转可递归展示的对象实现

需求:将嵌套字典转换为可通过属性访问的对象,且打印对象时能递归展示所有层级的键值对,而非仅显示内存地址。

输入示例字典:

user_vars = {
  "verbose": True,
  "testing": False,
  "login": {
    "username": "theadmin",
    "password": "password123"
  },
  "interfaces": {
    "trust": {
      "ip": "10.8.10.1/30"
    },
    "untrust": {
      "ip": "10.9.10.1/30"
    }
  }
}

解决方案代码

通过实现payloadGen类,递归将嵌套字典转换为对象,并通过自定义__repr__方法实现递归打印:

class payloadGen:
    def __init__(self, data):
        for key, value in data.items():
            if isinstance(value, dict):
                # 递归处理嵌套字典,转为payloadGen实例
                setattr(self, key, payloadGen(value))
            else:
                setattr(self, key, value)
    
    def __repr__(self):
        # 递归生成键值对的字符串表示
        attrs = []
        for key, value in self.__dict__.items():
            attrs.append(f"{key}={repr(value)}")
        return f"payloadGen({', '.join(attrs)})"

用法演示

# 将字典转为对象
config = payloadGen(user_vars)

# 通过属性访问嵌套值
print(config.login.username)  # 输出: theadmin
print(config.interfaces.trust.ip)  # 输出: 10.8.10.1/30

# 打印整个对象,递归展示所有键值对
print(config)

打印config的输出效果:

payloadGen(verbose=True, testing=False, login=payloadGen(username='theadmin', password='password123'), interfaces=payloadGen(trust=payloadGen(ip='10.8.10.1/30'), untrust=payloadGen(ip='10.9.10.1/30')))

关键说明

  • __init__方法:遍历输入字典的键值对,若值为字典则递归创建payloadGen实例,实现嵌套结构的属性化访问。
  • __repr__方法:遍历对象的所有属性,递归调用子属性的__repr__方法,最终拼接出完整的递归式字符串表示,解决了默认打印仅显示内存地址的问题。

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:21:28