2024-03-29 01:52:18 发布
网友
您可以使用any()方法,它基本上检查布尔参数,但在本例中,0将作为False,而其他任何数字则作为True。 请尝试以下代码PY2:
dict1 = {"a": 0, "b": 1} dict2 = {"a": 0, "b": 0} print not any(dict1.itervalues()) print not any(dict2.itervalues())
第3页: dict1={“a”:0,“b”:1} dict2={“a”:0,“b”:0}
print(not any(dict1.values())) print(not any(dict2.values()))
输出:
False True
Edit2:one-sidenote/caution,用空的元素列表调用any()将返回False。 Edit3:感谢您的评论,更新了代码以反映python 3对字典迭代和打印功能的更改。
使用all:
all
>>> d = {1:0, 2:0, 3:1} >>> all(x==0 for x in d.values()) False >>> d[3] = 0 >>> all(x==0 for x in d.values()) True
无论您使用any还是all,计算都将是惰性的。all在遇到第一个错误值时返回False。any在遇到第一个truthy值时返回True。
any
False
True
因此,not any(d.values())将为您提供与我提供的示例字典相同的结果。它比具有生成器理解的all版本稍短。就我个人而言,我仍然更喜欢all变体,因为它表达了您想要的内容,而读者不必在其头脑中进行逻辑否定。
not any(d.values())
不过,在这里使用any还有一个问题:
>>> d = {1:[], 2:{}, 3:''} >>> not any(d.values()) True
字典不包含值0,但not any(d.values())将返回True,因为所有值都是错误的,即bool(value)返回空列表、字典或字符串的False。
bool(value)
总之:可读性计数,显式地,使用all解决方案。
使用all():
all()
all(value == 0 for value in your_dict.values())
如果给定iterable的所有元素都为true,则all返回True。
您可以使用any()方法,它基本上检查布尔参数,但在本例中,0将作为False,而其他任何数字则作为True。 请尝试以下代码PY2:
第3页: dict1={“a”:0,“b”:1} dict2={“a”:0,“b”:0}
输出:
Edit2:one-sidenote/caution,用空的元素列表调用any()将返回False。 Edit3:感谢您的评论,更新了代码以反映python 3对字典迭代和打印功能的更改。
使用
all
:无论您使用
any
还是all
,计算都将是惰性的。all
在遇到第一个错误值时返回False
。any
在遇到第一个truthy值时返回True
。因此,
not any(d.values())
将为您提供与我提供的示例字典相同的结果。它比具有生成器理解的all
版本稍短。就我个人而言,我仍然更喜欢all
变体,因为它表达了您想要的内容,而读者不必在其头脑中进行逻辑否定。不过,在这里使用
any
还有一个问题:字典不包含值0,但
not any(d.values())
将返回True
,因为所有值都是错误的,即bool(value)
返回空列表、字典或字符串的False
。总之:可读性计数,显式地,使用
all
解决方案。使用
all()
:如果给定iterable的所有元素都为true,则
all
返回True
。相关问题 更多 >
编程相关推荐