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.