测试一个键是不是存在于字典中,如果 [重复] 则在相同的情况下进行另一个测试

Posted

技术标签:

【中文标题】测试一个键是不是存在于字典中,如果 [重复] 则在相同的情况下进行另一个测试【英文标题】:Test if a key is present in a dict and do another test in the same if [duplicate]测试一个键是否存在于字典中,如果 [重复] 则在相同的情况下进行另一个测试 【发布时间】:2017-04-17 06:14:07 【问题描述】:

使用if ... and ...: 的以下代码是否安全,即我们确定首先测试第一个条件,并且如果密钥不存在,则忽略第二个条件?

d = 'a': 1
if 'b' in d and d['b'] == 2:
    print 'hello'

似乎是的,因为这不会产生错误。但是否适用于所有 Python 版本?

它永远不会生成KeyError: 'b'


PS:这可能更pythonic,没有歧义:

if 'b' in d:
    if d['b'] == 2:
        ...

【问题讨论】:

是的。 andor 都由语言保证短路(正如我在this answer 中说明的那样),它不仅仅是一个实现细节。另请注意allany 功能短路;为了充分利用这种行为,您应该为它们提供生成器。 更多pythonic方式,你可以if d.get('b', None) == 2:,如果key b不存在,它将得到None @Skycc 如果你希望默认值是get() 中的None,那么它应该是if d.get('b'),因为如果找不到它会自动返回None。第二个参数用于定义自定义默认值。 @Skycc 在 Python 3(或带有 from __future__ import print_function 的 Python 2)中,您可以删除 if 并直接使用 d.get('b') == 2 and print('hello'),尽管有些人会以可读性为由反对这种风格。跨度> @PM2Ring :我会永远找到the question you marked as duplicate,因为我不知道正确的键盘“短路”了。已经知道这个关键字就等于知道答案,因为在文档中很容易找到,所以我觉得很难将其视为“重复”;)此外,这个重复的问题非常模糊(没有什么例子短路是有问题的......) 【参考方案1】:

是的,它被称为短路和

python2(Link to the doc)和python3.x(Link to the doc)都支持短路andor

【讨论】:

谢谢。您可以添加参考链接和/或示例代码吗? @Basj 我已经用文档链接更新了答案。希望对你有帮助

以上是关于测试一个键是不是存在于字典中,如果 [重复] 则在相同的情况下进行另一个测试的主要内容,如果未能解决你的问题,请参考以下文章

如何根据密钥是否已存在更新我的字典? [重复]

检查给定键是不是已存在于字典中并将其递增

Python Dictionary交换键:值存在于多个键中时的值对[重复]

如果键不存在,则字典返回默认值[重复]

如果键是字符串/整数,则在字典中合并多个熊猫数据框

检查列是不是已存在,如果不存在,则在 sqlite 中更改表