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

如何将Python自定义属性字典转换为普通字典?附实现代码

把AttributeDictionary实例转换为普通Python字典

针对你定义的AttributeDictionary类,这里有几种实用的方法可以把它的实例转换成普通字典,分场景来看:

1. 浅转换(适用于无嵌套AttributeDictionary的场景)

因为你的类本身继承自dict,直接用内置的dict()构造函数就能快速得到一个浅拷贝的普通字典:

attr_dict = AttributeDictionary({"name": "Alice", "age": 30})
normal_dict = dict(attr_dict)

这种方法简单直接,但要注意:如果属性字典里嵌套了其他AttributeDictionary实例,这些嵌套对象不会被转换成普通字典,仍然保持原类型。

2. 递归深转换(处理嵌套场景)

如果存在嵌套的AttributeDictionary,我们需要递归遍历所有值,把嵌套的实例也转换成普通字典。可以写一个辅助函数:

def attr_dict_to_normal(attr_dict_obj):
    if isinstance(attr_dict_obj, AttributeDictionary):
        # 先转成基础dict,再递归处理每个值
        normal_dict = dict(attr_dict_obj)
        for key, value in normal_dict.items():
            normal_dict[key] = attr_dict_to_normal(value)
        return normal_dict
    elif isinstance(attr_dict_obj, list):
        # 处理列表里的嵌套对象
        return [attr_dict_to_normal(item) for item in attr_dict_obj]
    else:
        # 其他类型直接返回
        return attr_dict_obj

使用示例:

# 带嵌套的AttributeDictionary
nested_attr = AttributeDictionary(
    {"user": AttributeDictionary({"name": "Bob", "hobbies": ["reading"]}), "score": 95}
)
normal_nested = attr_dict_to_normal(nested_attr)
# 现在normal_nested里的user就是普通字典了
print(type(normal_nested["user"]))  # <class 'dict'>

3. 利用JsonMixin的序列化能力(如果JsonMixin支持)

你的类继承了json_mixin.JsonMixin,如果这个Mixin提供了to_json()或者类似的序列化方法,也可以先序列化成JSON字符串,再反序列化成普通字典:

import json

attr_dict = AttributeDictionary({"data": {"key": "value"}})
json_str = attr_dict.to_json()  # 假设JsonMixin实现了这个方法
normal_dict = json.loads(json_str)

这种方法的好处是不需要自己写递归逻辑,但依赖JsonMixin的实现是否能正确处理所有属性。

另外要注意:你的AttributeDictionary在__new__方法里给实例添加了attr1属性,转换时这个属性也会被包含到普通字典里,如果不需要的话,可以在转换后手动删除,或者在递归函数里过滤掉不需要的键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:56:46