从dict和key的存在得到正确或错误

时间:2016-02-09 00:29:36

标签: python

我正在尝试根据dict是否存在(不是True)以及是否包含值来获取布尔FalseNone值。

这是我的代码。我希望enabled == False,但会为其分配值cfg

In [105]: cfg = {}

In [106]: is_enabled = cfg and cfg.get('enabled')

In [107]: is_enabled
Out[107]: {}

为什么is_enabled == {}?这肯定是一个明显的错误,但我没有看到它。

3 个答案:

答案 0 :(得分:4)

欢迎来到短路布尔运算符的世界。在表达式cfg and ANYTHING中,由于cfg为空,因此它的布尔值为False。因此,永远不会评估第二个操作数。表达式的结果是第一个操作数,即{}。请注意,表达式0 and None的值为0,但表达式1 and None的值为None!

也许您希望该行读取is_enabled = bool(cfg) and cfg.get('enabled')或甚至只读is_enabled = cfg.get('enabled',False)

答案 1 :(得分:2)

取决于您实际想要重写的内容

cfg

if cfg仅在{{1}}等布尔上下文中计算为False。

答案 2 :(得分:0)

这样做

is_enabled = cfg is not None and 'enabled' in cfg