我有一个字典,我需要通过我的函数检查所有值(此函数不能更改)。 代码:
if func(arg, dict['a']) and func(arg, dict['b']) and func(arg, dict['c']) and func(arg, dict['d']):
pass
如何缩短if语句?
感谢。
答案 0 :(得分:9)
答案 1 :(得分:5)
您可以使用all
这样的功能
if all(func(arg, value) for value in myDict.values()):
...
注意:切勿将内置类型名称用作变量名称。在您的情况下,dict
是内置类型和函数的名称。这就是为什么我有myDict
示例运行
def func(arg, value):
return value
myDict = {}.fromkeys(list("abcd"), True)
if all(func("", value) for value in myDict.values()):
print "All TRUE"
<强>输出强>
All TRUE
答案 2 :(得分:1)
完整性,功能性方法。 (最好使用imap而不是Python2的地图)
from functools import partial
if all(map(partial(func, arg), my_dict.values()):
...
答案 3 :(得分:1)
使用all
或any
的当前代码和大多数解决方案将在找到第一个False值后立即停止评估dict中的条目(此功能称为“短路”)。如果必须为dict中的每个值调用func
,并且func
返回True或False(即,您不依赖于Python对非bool类型的bool解释),然后你可以使用sum
:
if sum(func(arg, my_dict[k]) for k in my_dict) == len(my_dict):
这使用了True
与1和False
的Python等价与0。
如果func
返回非bool值,则将func
的调用包裹为bool
:
if sum(bool(func(arg, my_dict[k])) for k in my_dict) == len(my_dict):