Python 2.7:dict(zip())不适用于布尔值

时间:2018-04-13 06:53:39

标签: python dictionary

这是我的计划。

l1 = ['alpha','image']
l2 = ['False','False']

d = dict(zip(l1,l2))

if d['image']:
   print("passing")

结果: 通过 这里d ['image']是假的。但它仍然进入if条件。即使值为False,为什么它会进入循环?

3 个答案:

答案 0 :(得分:0)

您正在传递string 'False'而不是布尔对象。

l1 = ['alpha','image']
l2 = [False,False]      #--->Boolean

d = dict(zip(l1,l2))

if d['image']:
   print("passing")

根据评论进行修改

if d['image'] == "True":
   print("passing")

答案 1 :(得分:0)

该值仍为字符串。所以你只是评估字符串是否为空。

如果您确实需要布尔值,请删除引号或检查字符串是否为" True"

'False' == 'True'

答案 2 :(得分:0)

由于您在评论中提到从文件中读取'False'因此必须是字符串,因此您必须将其与字符串'False'进行比较。虽然,我建议这个检查案例不敏感。

l1 = ['alpha','image']
l2 = ['False','False']

d = dict(zip(l1,l2))

if d['image'].lower() == 'false':
   print("passing")

将字符串转换为布尔等效字符的更通用方法如下:

def string_to_bool(s):
    if s.lower() == 'true':
        return True

    elif s.lower() == 'false':
        return False

    else:
        raise ValueError('string has no boolean conversion')

然后你可以做

if not string_to_bool(d['image']):
   print("passing")