1
有一種簡單的方法來映射/換理解namedtuples像映射在namedtuple作爲字典
[k + v for k,v in namedtuple]
我覺得我可以寫一個簡單的地圖功能,這個使用asDict但是如果是內涵。
有一種簡單的方法來映射/換理解namedtuples像映射在namedtuple作爲字典
[k + v for k,v in namedtuple]
我覺得我可以寫一個簡單的地圖功能,這個使用asDict但是如果是內涵。
我們將不得不更多地瞭解有關namedtuple數據看起來像使用列表理解。
或者,更廣泛的方法是使用遞歸函數來解壓嵌套的數據結構:
def reducer(obj):
if isinstance(obj, dict):
return {key: reducer(value) for key, value in obj.items()}
elif isinstance(obj, list):
return [reducer(value) for value in obj]
elif isnamedtupleinstance(obj): # see note
return {key: reducer(value) for key, value in obj._asdict().items()}
elif isinstance(obj, tuple):
return tuple(reducer(value) for value in obj)
else:
return obj
注意:如果你namedtuple包含其他namedtuples你需要這個輔助方法check for instances of namedtuples所以他們不會被誤認爲是實際的元組:
def isnamedtupleinstance(x):
_type = type(x)
bases = _type.__bases__
if len(bases) != 1 or bases[0] != tuple:
return False
fields = getattr(_type, '_fields', None)
if not isinstance(fields, tuple):
return False
return all(type(i)==str for i in fields)