我正在尝试将简单对象图中的数据转换为字典。我不需要类型信息或方法,也不需要能够再次将其转换为对象。
我找到了这个问题关于从对象字段创建字典, 但它不递归。
作为相对较新的Python用户,我担心我的解决方案可能很丑陋、不符合Python风格、有些隐晦的方式出错,或者只是老套的NIH。
我的第一次尝试似乎有效,直到我尝试使用列表和字典时,似乎更容易只检查传递的对象是否具有内部字典,如果没有,则将其视为值(而不是执行所有isinstance检查)。我之前的尝试也没有递归到对象列表中:
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
这种方法似乎更加有效,而且不需要使用异常,但我仍然不确定是否存在我不知道的情况导致它失败。
非常感谢任何建议。