我有一些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
答案 0 :(得分:7)
我不确定我是否理解你想要的东西 - 但如果我知道,这个功能可以做你想要的: 它以递归方式搜索对象的属性,产生嵌套字典+列表结构,结束点是不具有__dict__属性的python对象 - 在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
答案 1 :(得分:4)
生活黑客:
/Code/example.cs