【发布时间】:2023-04-02 09:39:02
【问题描述】:
我有时有一个布尔值字典,如下所示;
d = {'a': True, 'b': False, 'c': False}
我将其用作开关的集合,这些开关都必须打开 (True
) 才能进行某些操作。在迭代时,这些开关会被翻转,例如
for char in text:
if char == '0':
d['a'] = not d['a'] # State of 'a' is switched
...
'a'
必须在上面查找两次这一事实困扰着我。如果我用1
和-1
表示开关的值,我可以像d['a'] *= -1
那样进行切换,它只引用d['a']
一次。
理想情况下,Python 会为我提供就地“非赋值”运算符。
【问题讨论】:
-
从集合中添加/删除可能更有意义(在集合中表示
True
,否则为False
),而不是尝试切换字典值。取决于具体的用例。 -
@Carcigenicate 如何在单个语句中执行此“添加或删除”操作?
-
您可以使用与您的答案所暗示的几乎相同的语法:
s = {1, 2}; s ^= {3}; print(s); s ^= {3}; print(s)
。我最初的建议更多是关于在这个用例中使用字典。我觉得 Set 是一个更好的容器,除非您需要跟踪所有三个“可见但真实”、“可见但虚假”和“未见”,在这种情况下,字典会更有意义。
标签:
python
python-3.x
boolean
assignment-operator
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python:就地“不”布尔值 - Python技术站