带点的字典键不适用于 update()?

詹彼得

我想使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章