2017-04-06 4 views
1

マッピング

[k + v for k,v in namedtuple] 

私が感じるようにnamedtuplesを理解するために、私はこの使用してasDictための簡単なマップ機能を記述したが内包表記のためのものについてはできるように/マッピングするための簡単な方法があります。

答えて

0

リストの理解を使用するために名前付きタプルのデータがどのように見えるかをもう少し知る必要があります。

また、より広範な方法は、ネストされたデータ構造を展開する再帰関数を使用することです:

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)