MFB*_*MFB 5 python dictionary sqlalchemy
我有一些SQLAlchemy对象,其中包含更多SQLAlchemy对象的列表,依此类推(大约5个级别).我希望将所有对象转换为字典.
我可以使用__dict__属性将对象转换为字典,没问题.但是,我也无法找到转换所有嵌套对象的最佳方法,而无需明确地执行每个级别.
到目前为止,这是我能想到的最好的,但它没有正确递归.它基本上在一次通过后中断,所以我的逻辑显然有问题.你能看出它有什么问题吗?
我希望这样做:
all_dict = myDict(obj.__dict__)
def myDict(d):
    for k,v in d.items():
        if isinstance(v,list):
            d[k] = [myDict(i.__dict__) for i in v]
        else:
            d[k] = v
    return d
我不确定我是否完全理解你想要的东西 - 但是如果我得到了,这个函数可以做你想要的:它会递归搜索一个对象的属性,产生一个嵌套的字典+列表结构,结尾点是python对象而不是具有__dict__属性 - 在SQLAlchemy的情况下可能是基本的Python类型,如数字和字符串.(如果失败了,替换"hasattr dict"测试更合理的东西应该修复代码以满足您的需求.
def my_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(my_dict(item))
        else:
            element = my_dict(val)
        result[key] = element
    return result
小智 6
生活黑客:
def to_dict(obj):
    return json.loads(json.dumps(obj, default=lambda o: o.__dict__))