我想验证字典值中是否存在真值。如果我像下面的代码一样验证字典,那么它说值存在,因为它会返回 dict_values([''])
,这在 python 中表明它不是 None 但如果你检查字典,那么没有值:
a = {1:''}
if a.values():
print(a.values())
else:
print('No values')
验证 dict 是否包含值的最佳 Pythonic 方法是什么?可能存在许多键存在但每个键都有空值的情况。
注意:
答案 0 :(得分:1)
看起来所有常见的 falsey 值都是无效的,除了数字类型的零是有效的。如果是这种情况,您可以将 Python's Truth Value Testing 与 Python 标准库中的 numbers module 一起使用。
简单的解决方案:
此解决方案迭代字典的值两次。
如果存在一个或多个无效值,则返回 False
。
from numbers import Number
a = {1: "", 2: 0, 3: 0.0}
all(isinstance(x, Number) or x for x in a.values()) # False
a = {1: "Hello", 2: 0, 3: 0.0}
all(isinstance(x, Number) or x for x in a.values()) # True
更好的性能:
这里的 is_valid
只会迭代到第一个无效值。
from numbers import Number
def _invalid(value):
return not isinstance(value, Number) and not value
def is_valid(dict_):
return next(filter(_invalid, dict_.values()), True)
Alt:
如果存在一个或多个有效值,则返回 True
。
next(filter(lambda x: isinstance(x, Number) or bool(x), a.values()), False)
答案 1 :(得分:0)
试试这个:
if a.values() and '' not in a.values():
我不确定这是最好的 Pythonic 方式,但它很简单并且有效。