我有以下格言:
default_wallart = {
"parkinglot":False,
"ferrari":False,
"roadtrip":False,
"sincity":False,
"peekaboo":False
}
当发生某些事情并触发它时,我将其更新为True
。但是,我想做的是检查dict中的值的 any 是否返回False(并且对于任何值,如果它们确实返回False则做一件事情,如果不是) ,然后执行其他操作)。
那么...我该怎么办?如果我可以单行检查就可以了,但是如果没有,我可以解决这个问题。
注意:这适用于Python 2.7x
答案 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
与True
或False
进行检查是正常的,因为这两个都是单例。)
答案 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