2017-04-06 59 views
1

有一种简单的方法来映射/换理解namedtuples像映射在namedtuple作为字典

[k + v for k,v in namedtuple] 

我觉得我可以写一个简单的地图功能,这个使用asDict但是如果是内涵。

回答

0

我们将不得不更多地了解有关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)