【问题标题】:Argparse Dictionary to NamespaceArgparse 字典到命名空间
【发布时间】:2021-03-01 20:17:53
【问题描述】:

我在我的 python 代码中使用argparse 作为参数解析器。将字典解析为 argparse 对象的最佳方法是什么?

例如,我的字典是:

{
    "activation_dropout": 0.0,
    "activation_fn": "gelu",
    "attention_dropout": 0.0,
    "beam": 1,
}

我期望的是一个具有activation_dropoutactivation_fnattention_dropoutbeam 属性的argparse.Namespace 对象

我希望argparse 中有一个方法可以将输入作为字典,并以命名空间作为这些变量给出argparse

【问题讨论】:

  • 这能回答你的问题吗? Python: load variables in a dict into namespace
  • @Tomerikoo,argparse.Namespace 不是模块的namespace
  • @hpaulj 对此一无所知,但第二个答案与您的相同,并且接受了另一种方法...

标签: python argparse


【解决方案1】:

只需使用** 解包:

In [57]: adict={'foo':1, 'bar':'astring', 'baz':[1,2,3]}
In [59]: argparse.Namespace(**adict)
Out[59]: Namespace(bar='astring', baz=[1, 2, 3], foo=1)
In [60]: args = argparse.Namespace(**adict)
In [61]: args
Out[61]: Namespace(bar='astring', baz=[1, 2, 3], foo=1)
In [62]: args.bar
Out[62]: 'astring'

它的文档:

In [63]: argparse.Namespace?
Init signature: argparse.Namespace(**kwargs)
Docstring:     
Simple object for storing attributes.

Implements equality by attribute names and values, and provides a simple string representation.

这是一个简单的对象子类,将其**kwargs 分配给它的属性。并提供了基本的展示方式。

vars 是标准的 Python 反转方法:

In [65]: vars(args)
Out[65]: {'foo': 1, 'bar': 'astring', 'baz': [1, 2, 3]}

在内部,parser.parse_args 创建一个 argparse.Namespace() 并使用 setattr(args, dest, value) 分配值。

【讨论】:

    猜你喜欢
    • 2021-06-24
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2021-12-29
    • 2013-09-11
    • 1970-01-01
    相关资源
    最近更新 更多