如何从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方法吗?
答案 0 :(得分:0)
如果您不关心namedtuple的实际类型,可以创建一个代表Namespace
的“匿名”namedtuple。
这是我以前用过的方法:
def auto_namedtuple(classname='auto_namedtuple', **kwargs):
return collections.namedtuple(classname, tuple(kwargs))(**kwargs)
在您的情况下使用:
nt = auto_namedtuple(**vars(args))