python dict 和 object 相互转换

文章讲述了如何在Python中通过as_dict和as_obj函数实现对象和字典间的转换,特别关注了处理嵌套结构的方法。
部署运行你感兴趣的模型镜像

python dict 和 object 的相互转换

dict.py 借助 dict, isinstance 来实现对象与字典之间的相互转换

def as_dict(obj):
    if not hasattr(obj, "__dict__"):
        return obj
    result = {}
    for key, val in obj.__dict__.items():
        if key.startswith("_"):
            continue
        element = []
        if isinstance(val, list):
            for item in val:
                element.append(as_dict(item))
        else:
            element = as_dict(val)
        result[key] = element
    return result


def as_obj(d):
    if isinstance(d, list):
        d = [as_obj(x) for x in d]
    if not isinstance(d, dict):
        return d

    class C:
        pass

    obj = C()
    for k in d:
        obj.__dict__[k] = as_obj(d[k])
    return obj

test_dict.py

import dict


class Book:
    def __init__(self, name, price, author):
        self.name = name
        self.price = price
        self.author = author


class Author:
    def __init__(self, name, age):
        self.name = name
        self.age = age


def test_as_dict():
    book_dict = dict.as_dict(Book(name="Python crash course", price=29.50, author=Author(name="Phur", age=32)))
    assert book_dict["name"] == "Python crash course" and book_dict["author"]["age"] == 32


def test_as_obj():
    book = dict.as_obj({"name": "Python crash course", "price": 29.50, "author": {"name": "Phur", "age": 32}})
    assert book.name == "Python crash course" and book.author.age == 32

您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值