【发布时间】:2009-09-08 09:41:50
【问题描述】:
我需要将对象“扁平化”为对象属性的嵌套字典。我想要这样做的对象通常只是基本类型的容器或以类似方式起作用的其他对象。例如:
class foo(object):
bar = None
baz = None
class spam(object):
eggs = []
x = spam()
y = foo()
y.bar = True
y.baz = u"boz"
x.eggs.append(y)
我需要将其“展平”为:
{ 'eggs': [ { 'bar': True, 'baz': u'boz' } ] }
stdlib 中有什么可以为我做这件事的吗?如果不是,我是否必须针对所有已知的基本类型测试isinstance,以确保我不会尝试转换无法转换的对象(例如:bool)?
编辑:
这些对象从外部库返回到我的代码,因此我无法控制它们。我可以在我的方法中按原样使用它们,但是将它们转换为字典会更容易(更安全?)——尤其是对于单元测试。
【问题讨论】:
-
我认为解决这个问题的唯一方法是通过迭代它自己的成员变量来编写一个支持序列化的基类。我不确定这是否是您想要的,但如果是这样,我很乐意提供一个示例实现。
-
你能给我们用例吗?可能有一种更 Pythonic 的方式来解决整体问题。
标签: python