Я пытаюсь преобразовать данные из простого графа объектов в словарь. Мне не нужна информация о типе или методы, и мне не нужно снова преобразовывать ее обратно в объект.
Я нашел этот вопрос о создании словаря из полей объекта, но он не делает это рекурсивно.
Будучи относительно новичком в python, я обеспокоен тем, что мое решение может быть уродливым, или неспокойным, или сломанным каким-то неясным способом, или просто старым 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
Кажется, что он работает лучше и не требует исключений, но я еще не уверен, есть ли случаи, когда я не знаю, где он падает.
Любые предложения будут высоко оценены.