遍历命名空间

21
我有一个命名空间,看起来像这样:

Namespace(aTQ=None, bE=None, bEQ=None, b=None, bQ=None, c=None, c=None, cJ=None, d=None, g=None, jR=['xx', '015'], lC=None, l=None)

如何遍历它,以便在原地找到并替换“jR”键的'xx'值?

@martineau 我原以为我理解了他的问题,直到看到那个块引用;我原以为他是指打包的文件命名空间,但是那个块引用似乎暗示他并不是这个意思。 - Sapphire_Brick
@Sapphire_Brick:从被接受的答案来看,这不是OP想要的,但是Python 3.3的types模块添加了一个非常相似的东西,称为SimpleNamespace,其文档说“可能有用作为class NS: pass的替代品”。 - martineau
你最终做了什么?你能分享你的解决方案吗? - Charlie Parker
1个回答

24

我不确定您预先知道什么(名字jR,还是只有一个名字具有not None值),但您可以尝试使用vars(),它像__dict__一样应该是一个以名称为键的字典,其中包含您名称空间中的名称。所以如果您在某个地方有字符串'jR'

vars()['jR'] = vars()['jR'][0]
同样,你可以使用 namespace.__dict__ 来获得相同的字典,而不是使用 vars()
这将使得 jR 的唯一值为 ['xx','015'] 中的第一个值。
需要明确的是,由于 vars()__dict__ 都返回字典,因此你可以按以下方式遍历它们:
for k in namespace.__dict__:
    if namespace.__dict__[k] is not None:
        <<do something>>

2
vars接受args参数,例如vars(args)吗?从问题中看来,他显然有一个带有某种类型的“命名空间”结构/实例的对象...你能解决这个吗? - Charlie Parker
@CharlieParker 不确定其他情况,但我能够使用 options.__dict__,其中 options 是调用 argparse.parse_args 方法的 Namespace 结构化结果 - 因此似乎您可以在任意 Namespace 结构上使用 __dict__ - bas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接