检查字典中是否存在值的 Pythonic 方法

时间:2020-12-28 11:58:15

标签: python

我想验证字典值中是否存在真值。如果我像下面的代码一样验证字典,那么它说值存在,因为它会返回 dict_values(['']),这在 python 中表明它不是 None 但如果你检查字典,那么没有值:

a = {1:''}
if a.values():
    print(a.values())
else:
    print('No values')  

验证 dict 是否包含值的最佳 Pythonic 方法是什么?可能存在许多键存在但每个键都有空值的情况。

注意:

  • 空字符串不会被视为值(无效,如果在这种情况下条件会失败)。
  • 0 将被视为有效值。
  • 该值不会是列表/字典/元组,它可以是字符串、整数或浮点数

2 个答案:

答案 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 方式,但它很简单并且有效。