Python点表示法对于连字符键的dict中断?

2024-04-28 12:56:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个Javascript风格的字典,如前所述here。实施:

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

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

^{pr2}$

分配给foo.a-b会导致:

SyntaxError: can't assign to operator

这会中断,因为“-”被视为减号运算,而不是键名的一部分。有没有其他方法可以创建一个具有点样式成员访问权限的字典?在


Tags: selfnonegetreturn字典here风格def
3条回答

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

>>> foo.a-b = 'ab'
ReferenceError: invalid assignment left-hand side

因此,就像在JavaScript中一样,回到:

^{pr2}$

这是不可能直接做到的。最好的方法是允许混合访问-就像你已经做的那样-并使用它。或者,也可以使用setattr()/getattr(),作为Not_a_Golfer suggests。在

a-b不是Python中的有效标识符。有效标识符可以由字母、数字和下划线(_)组成。变量名中的任何其他字符都是非法的。在

Is there another way to create a dictionary with dot-style member access?

没有办法使用不是有效标识符的键进行点式访问。在

相关问题 更多 >