Python点符号dict打破了带连字符的键?

kni*_*ite 0 python

我正在使用这里讨论的Javascript风格的字典.执行:

class DotDict(dict):
    def __getattr__(self, attr):
        return self.get(attr, None)
    __setattr__= dict.__setitem__
    __delattr__= dict.__delitem__
Run Code Online (Sandbox Code Playgroud)

我已经使用了这个结构一段时间没有问题,但最近需要一个带有连字符的字典,如下所示:

    foo = DotDict()
    foo.a = 'a'        #Business as usual
    foo.a-b = 'ab'     #Broken
Run Code Online (Sandbox Code Playgroud)

分配给foo.ab会导致:

SyntaxError: can't assign to operator
Run Code Online (Sandbox Code Playgroud)

这会打破,因为' - '被视为减号操作而不是键名的一部分.是否有另一种方法来创建具有点式成员访问权限的字典?

var*_*tec 5

a-b不是Python中的有效标识符.有效标识符可以包含字母,数字和下划线(_).变量名中的任何其他字符都不合法.

是否有另一种方法来创建具有点式成员访问权限的字典?

没有办法具有无效的标识符键点式访问的.


Dzi*_*inX 5

我不知道你为什么感到惊讶。在 JavaScript 中,同样的表达式也会抛出错误:

>>> foo.a-b = 'ab'
ReferenceError: invalid assignment left-hand side
Run Code Online (Sandbox Code Playgroud)

所以,就像在 JavaScript 中一样,回退到:

>>> foo['a-b'] = 'ab'
Run Code Online (Sandbox Code Playgroud)