如果key不存在,python dictionary将为true

时间:2015-09-22 08:28:46

标签: python

检查是否存在密钥但是即使密钥不存在,下面的代码也会评估为True。这是正确的和pythonic方式吗

a={u'is_l': 0, u'importance': 1, u'release_id': u'12345', u'company': 1 }

if 'verision' and 'importance' in a: 
   //evaluates to True why ?

2 个答案:

答案 0 :(得分:0)

Python为你添加括号:

if 'verision' and ('importance' in a):

由于所有非空字符串都是真实的,因此评估为True

如果您有两个以上的元素,最好将all与列表一起使用:

if all(el in a for el in ['verision', 'importance', ...]):

答案 1 :(得分:0)

因为表达式的分组就像 -

if (!mainVC.isInitialStart)
{
    CGRect openedFrame = mainVC.currentActiveNVC.view.frame;
    [mainVC.currentActiveNVC.view removeFromSuperview];
    mainVC.currentActiveNVC.viewControllers = nil;
    mainVC.currentActiveNVC = nil;

    mainVC.currentActiveNVC = destinationNVC;
    mainVC.currentActiveNVC.view.frame = openedFrame;
    navItem = destinationNVC.navigationBar.topItem;

}

并且if ('verision') and ('importance' in a): 字符串在布尔上下文中是'version'(布尔上下文中只有空字符串是True,所有其他非空字符串都是True,请阅读更多关于它{{3} })。 ,因此它会使False条件短路并返回and。你想要 -

True

对于只有2个键,我建议上面的版本,但是如果你有2个以上的键,你可以按here的注释中的建议创建一组这些键,并检查该组是否是一个子集字典键。示例 -

if 'verision' in a and 'importance' in a:

演示 -

needs = set(['version','importance','otherkeys'..])    #set of keys to check
if needs.issubset(a):                       #This can be written as a single line, but that would make the line very long and unreadable.