检查False是否为字典中的任何值

时间:2019-01-05 11:45:14

标签: python python-2.7

我有以下格言:

default_wallart = {
    "parkinglot":False,
    "ferrari":False,
    "roadtrip":False,
    "sincity":False,
    "peekaboo":False
}

当发生某些事情并触发它时,我将其更新为True。但是,我想做的是检查dict中的值的 any 是否返回False(并且对于任何值,如果它们确实返回False则做一件事情,如果不是) ,然后执行其他操作)。

那么...我该怎么办?如果我可以单行检查就可以了,但是如果没有,我可以解决这个问题。

注意:这适用于Python 2.7x

4 个答案:

答案 0 :(得分:2)

怎么办

if all(default_wallart.values()):
    # All True
else:
    # At least one False.


值得一提的是

>>> all({}.values()) # <=> all([])
True

因此,请注意这种可能性。根据您要执行的操作,您可能需要检查all(default_wallart.values()) and len(default_wallart)

答案 1 :(得分:1)

您不能为此简单地在字典的值上使用内置的all,因为如果发现任何 falsy 值(例如{{1}),它将返回False },0[],...

演示:

{}

我们还需要一步,明确检查>>> default_wallart = { ...: "parkinglot":1, ...: "ferrari":1, ...: "roadtrip":1, ...: "sincity":0, ...: "peekaboo":1 ...: } >>> >>> all(default_wallart.values()) False

没有False

False

至少有一个>>> all(x is not False for x in default_wallart.values()) True

False

(用>>> any(x is False for x in default_wallart.values()) False TrueFalse进行检查是正常的,因为这两个都是单例。)

答案 2 :(得分:0)

您可以使用all

def do_something():
    return "do something"

def do_else():
    return "do else"


default_wallart = {
    "parkinglot":False,
    "ferrari":False,
    "roadtrip":False,
    "sincity":False,
    "peekaboo":False
}


result = do_something() if not all(default_wallart.itervalues()) else do_else()

print result

输出

do something

答案 3 :(得分:-1)

您可以遍历字典中的所有值以查找其中是否有误

a = False
for key, value in default_wallart.items():
    if value: # If value is true, just continue to the next item
        continue
    else: # If its not True (aka False), define a as True and break the loop
        a = True
        break

if a:
    pass # When atleast one value is False
else: 
    pass # When all values are True