从Namspace创建namedtuple?

时间:2017-07-24 16:54:25

标签: python python-2.7 argparse namedtuple

如何从namedtuple初始化Namespace

import collections
import argparse

nt=collections.namedtuple("nt",["foo","bar"]) # _NOT_ "baz"!
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
parser.add_argument('--bar')
parser.add_argument('--baz')
args = parser.parse_args(...)

如果某些脚本参数进入namedtuple,该怎么办?

以下是我提出的建议:

nt_param=nt(**{f:getattr(args,f,None) for f in nt._fields})

有更多的pythonic方法吗?

1 个答案:

答案 0 :(得分:0)

如果您不关心namedtuple的实际类型,可以创建一个代表Namespace的“匿名”namedtuple。

这是我以前用过的方法:

def auto_namedtuple(classname='auto_namedtuple', **kwargs):
    return collections.namedtuple(classname, tuple(kwargs))(**kwargs)

在您的情况下使用:

nt = auto_namedtuple(**vars(args))