我正在尝试将数据从简单的对象图转换为字典。我不需要类型信息或方法,也不需要能够再次将其转换回对象。
我发现 了这个关于从对象的字段创建字典的问题,但它不是递归地做的。
作为 python 的新手,我担心我的解决方案可能很丑陋,或者不符合 pythonic,或者以某种晦涩的方式被破坏,或者只是普通的旧 NIH。
我的第一次尝试似乎奏效了,直到我用列表和字典尝试它,而且检查传递的对象是否有内部字典似乎更容易,如果没有,就把它当作一个值(而不是做所有的实例检查).我以前的尝试也没有递归到对象列表中:
def todict(obj):
if hasattr(obj, "__iter__"):
return [todict(v) for v in obj]
elif hasattr(obj, "__dict__"):
return dict([(key, todict(value))
for key, value in obj.__dict__.iteritems()
if not callable(value) and not key.startswith('_')])
else:
return obj
这似乎工作得更好并且不需要例外,但我仍然不确定这里是否有案例我不知道它在哪里失败。
任何建议将不胜感激。
原文由 Shabbyrobe 发布,翻译遵循 CC BY-SA 4.0 许可协议
结合我自己的尝试和从 Anurag Uniyal 和 Lennart Regebro 的回答中得到的线索对我来说最有效: