如何检查字典的所有值是否为0

2024-03-29 01:52:18 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

您可以使用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

>>> 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在遇到第一个错误值时返回Falseany在遇到第一个truthy值时返回True

因此,not any(d.values())将为您提供与我提供的示例字典相同的结果。它比具有生成器理解的all版本稍短。就我个人而言,我仍然更喜欢all变体,因为它表达了您想要的内容,而读者不必在其头脑中进行逻辑否定。

不过,在这里使用any还有一个问题:

>>> d = {1:[], 2:{}, 3:''}
>>> not any(d.values())
True

字典不包含值0,但not any(d.values())将返回True,因为所有值都是错误的,即bool(value)返回空列表、字典或字符串的False

总之:可读性计数,显式地,使用all解决方案。

使用all()

all(value == 0 for value in your_dict.values())

如果给定iterable的所有元素都为true,则all返回True

相关问题 更多 >