我有一个如下所示的命名空间:
命名空间(aTQ=无,bE=无,bEQ=无,b=无,bQ=无,c=无, c=无, cJ=无, d=无, g=无, jR=['xx', '015'], lC=无, l=无)
如何迭代它以便我可以找到并替换“jR”键的“xx”值?
我不确定您事先知道什么(名称
jR
,或者只有一个名称具有not None
值),但您可以尝试使用vars()
,它与__dict__
一样应该是一个字典,将名称空间中的名称作为其键。 所以如果你在某处有字符串 'jR'
,
vars()['jR'] = vars()['jR'][0]
同样,您可以使用
namespace.__dict__
而不是 vars()
获得相同的字典
将为您留下
['xx','015']
中的第一个值作为 jR
的唯一值。
需要明确的是,由于
vars()
和 __dict__
都返回字典,因此您可以将它们迭代为:
for k in namespace.__dict__:
if namespace.__dict__[k] is not None:
<<do something>>
老问题,但我想无论如何我都会插话。 我假设 OP 正在使用
argparse
模块并希望迭代并修改其参数。 有一个名为 _get_kwargs()
的受保护方法,Namespace
对象可以调用该方法。 它返回键/值元组的列表。 我不明白为什么 argparse 的作者认为这个特定的方法需要受到保护,但请注意它是并且使用时需要您自担风险。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='The foo argument', type=str)
parser.add_argument('--bar', help='The bar argument', type=int)
original_args = parser.parse_args()
modified_args = argparse.Namespace()
for key, val in original_args._get_kwargs():
if key == 'bar':
new_bar_val = 2
setattr(modified_args, key, new_bar_val)
else:
setattr(modified_args, key, val)
print(f'Original args: {original_args}')
print(f'Modified args: {modified_args}')
如果您使用命令
argparse_test.py --foo asdf --bar 1
运行此代码,它将输出以下内容:
Original args: Namespace(foo='asdf', bar=1)
Modified args: Namespace(foo='asdf', bar=2)