我想使用parDict
包含点的键的字典,并发现该update
函数不会解释带点的键,尽管字典工作正常。点符号是由于参数集的面向对象。
下面的例子说明了“不一致”。
parDict = {}
parDict['a'] = 1
parDict['b'] = 2
parDict['group1.b'] = 3
parDict
可以在一个命令中完成多个更新,这对我很重要
parDict.update(a=4, b=4)
但无法识别以下更新
parDict.update(group1.b=4)
我得到:“语法错误:表达式不能包含赋值,......”
然而,
parDict['group1.b'] = 4
工作正常。
这是一种解决这种“不一致”的方法,update()
甚至可以用于名称中带有点的键吗?
也许了解更广泛的背景为什么update()
在这里不起作用会很有趣。
我很高兴收到有关 parDict 问题的意见,尽管我最初忽略了“键”和“标识符”之间的区别是非常基本的。我想到的目的是通过面向对象的参数结构简化命令行交互。这是一个具有一定普遍性的问题,也许这里有比我在下面建议的更好的解决方案?
对元组使用 update() 很有吸引力,更具可读性,并且避免使用@wjandrea 发布的链接中指出的一些标志。但是要以这种方式使用它,我们需要引入另一个字典,即我们有 parDict 具有短的唯一参数名称并使用标识符和对应的值,然后引入 parLocation,这是一个将短名称参数名称与面向对象的位置相关联的字典细绳。
解决方案
parDict = {}
parDict['a'] = 1
parDict['b'] = 2
parDict['group1_b'] = 3
和
parLocation = {}
parLocation['a'] = 'a'
parLocation['b'] = 'b'
parLocation['group1_b'] = 'group1.b'
对于命令行交互,我现在可以写
parDict.update(b=4, group1_b=4)
对于参数值被带到面向对象系统的内部处理,我写了一些类似的东西
for key in parDict.keys(): set(parLocation[key], parDict[key])
其中 set() 是一些将参数“位置”和“值”作为参数的函数。
由于这个问题有一些普遍性,我虽然这里可能有其他更好或更直接的方法?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句