【问题标题】:Iterate through a Namespace遍历命名空间
【发布时间】:2021-07-30 16:10:15
【问题描述】:

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

命名空间(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:从公认的答案来看,这不是 OP 的意思,但是在 Python 3.3 types 模块中添加了非常相似的东西,称为 SimpleNamespace,其文档说“可能有用class NS: pass"的替代品。
  • 你最后做了什么?您可以分享您的解决方案作为答案吗?

标签: python namespaces


【解决方案1】:

我不确定您事先知道什么,(名称 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>>

【讨论】:

  • 确实 vars 接受 args 例如vars(args)?从这个问题看来,他显然有一个具有某种类型的对象 Namespace 结构/实例......你能解决这个问题吗?
  • @CharlieParker 不确定其他情况,但我能够使用options.__dict__,其中options 是调用argparse.parse_args 方法的命名空间结构结果——所以看起来你可以在任意命名空间结构上使用__dict__
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多