我試圖將數據從簡單的對象圖轉換爲字典。我不需要類型信息或方法,我不需要能夠再次將它轉換回對象。我發現this question about creating a dictionary from an object's fields,但它不會遞歸地執行它。將python對象圖遞歸轉換爲字典
對於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
這似乎更好地工作,而且不需要例外,但我又真不知道如果在這裏有這樣的情況我不知道它跌倒的地方。
任何建議將不勝感激。
在python也不是那麼不好用異常,有時它可以簡化編碼,一個Python的way- EAFP(更容易請求原諒比許可) – 2009-06-24 04:52:54
特殊情況下,可能是當對象有__slots__,編輯回答 – 2009-06-24 04:56:12
點,但異常的事情是一場神聖的戰爭,我傾向於傾向於他們永遠不會被拋出,除非有什麼是真正的例外,而不是預期的程序流。每個對自己的那一個:) – Shabbyrobe 2009-06-24 04:59:41