Python中dict赋值时为何要先检查键是否存在?
关于Python字典赋值前键存在性检查的疑问
我发现Python里的dict实例在赋值前会检查键是否存在,这在我看来有点多余,下面用示例说明原因。
示例:
if(key in dictionary): dictionary[key] = dictionary[key] + 1 else: dictionary[key] = 1
在这个示例里,执行dictionary[key] = dictionary[key] + 1其实没必要提前检查键是否存在:
- 赋值右侧的
dictionary[key] + 1,键存在时会正常取值,不存在时直接抛出KeyError——这个检查和赋值操作本身无关; - 而左侧的
dictionary[key] =操作,不管键是否存在,只要计算key的哈希值然后赋值就行,键存在性检查对最终结果没有任何影响。
另请注意: 不管有没有写if(key in dictionary):这个判断,都会存在冗余的检查。
再看示例里的第二部分dictionary[key] = 1:这里的键存在性检查同样不改变结果——如果键已经存在,原有值会被1覆盖。那赋值前做这个检查到底有什么意义?
或许这种赋值前的隐式检查有合理的原因?看起来赋值操作的左右两侧,字典的行为不一样:左侧找不到key时不会抛出KeyError,而是直接创建新键。但我暂时想不出这种赋值前检查的必要场景,如果有相关案例,欢迎分享。
内容的提问来源于stack exchange,提问作者ZenPyro
相关产品推荐
相关产品推荐

