如何从 argument_group 获取嵌套字典
How to get nested dict from argument_group
我希望程序的不同部分只看到解析的必要参数。
parser = argparse.ArgumentParser()
log = parser.add_argument_group()
log.add_argument('--name')
mp = parser.add_argument_group()
mp.add_argument('--processes', type=int)
args = parser.parse_args()
我希望得到像 {'mp':{'processes'=1}, 'log':{'name'='log.log'}}
这样的字典,但是 vars(args)
将其扁平化为 {'processes'=1, 'name'='log.log'}
虽然这不是问题的精确解决方案,但它 returns 是理想的选择。
class Config(Namespace):
def __setattr__(self, name, value):
if '.' in name:
name = name.split('.')
name, rest = name[0], '.'.join(name[1:])
setattr(self, name, type(self)())
setattr(getattr(self, name), rest, value)
else:
super().__setattr__(name, value)
def dict(self):
dict = {}
for k, v in self.__dict__.items():
if isinstance(v, Config):
dict[k] = v.dict()
else:
dict[k] = v
return dict
我希望程序的不同部分只看到解析的必要参数。
parser = argparse.ArgumentParser()
log = parser.add_argument_group()
log.add_argument('--name')
mp = parser.add_argument_group()
mp.add_argument('--processes', type=int)
args = parser.parse_args()
我希望得到像 {'mp':{'processes'=1}, 'log':{'name'='log.log'}}
这样的字典,但是 vars(args)
将其扁平化为 {'processes'=1, 'name'='log.log'}
虽然这不是问题的精确解决方案,但它 returns 是理想的选择。
class Config(Namespace):
def __setattr__(self, name, value):
if '.' in name:
name = name.split('.')
name, rest = name[0], '.'.join(name[1:])
setattr(self, name, type(self)())
setattr(getattr(self, name), rest, value)
else:
super().__setattr__(name, value)
def dict(self):
dict = {}
for k, v in self.__dict__.items():
if isinstance(v, Config):
dict[k] = v.dict()
else:
dict[k] = v
return dict