Rekurencyjnie konwertuj wykres obiektu Pythona na słownik

Próbuję przekonwertować dane z prostego wykresu obiektowego na słownik. Nie potrzebuję informacji o typie ani metod i nie muszę być w stanie ponownie przekonwertować go na obiekt.

znalazłemto pytanie o tworzenie słownika z pól obiektu, ale nie robi tego rekurencyjnie.

Będąc stosunkowo nowym w pythonie, obawiam się, że moje rozwiązanie może być brzydkie, niepythoniczne lub złamane w jakiś niejasny sposób, lub po prostu stary zwykły NIH.

Moja pierwsza próba wydawała się działać, dopóki nie wypróbowałem jej z listami i słownikami, i wydawało się łatwiejsze, aby sprawdzić, czy przekazany obiekt ma wewnętrzny słownik, a jeśli nie, po prostu potraktować go jako wartość (zamiast robić to wszystko, sprawdzając na początku ). Moje poprzednie próby również nie powtarzały się na listach obiektów:

<code>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
</code>

Wydaje się, że to działa lepiej i nie wymaga wyjątków, ale wciąż nie jestem pewien, czy są przypadki, o których nie wiem, gdzie to spada.

Wszelkie sugestie byłyby bardzo mile widziane.

questionAnswers(8)

yourAnswerToTheQuestion