检查嵌套字典中值是否存在False

时间:2020-10-18 16:06:38

标签: python dictionary

在Python嵌套字典中的任何地方,有没有一种简单的方法可以找到 False 作为值的出现。我当然可以遍历键和值,但是也许有更好的方法,尤其是当我们不知道嵌套字典的深度时。

字典下面的示例应返回False,因为只有一次出现False

{'metric1': {'details': {'baseline': {'actual': 1,
                                      'lower_bound': 1,
                                      'result': True,
                                      'upper_bound': 2}},
             'result': True},
 'metric2': {'details': {'baseline': {'actual': 0,
                                      'lower_bound': 1,
                                      'result': False,
                                      'upper_bound': 2}},
             'result': None},
 'metricbool': {'details': None, 'result': True}}

2 个答案:

答案 0 :(得分:0)

您可以将all与递归一起使用:

def has_true(d):
   return all(has_true(i) and ('result' not in i or i['result']) if isinstance(i, dict) else True for i in d.values())

data = {'metric1': {'details': {'baseline': {'actual': 1, 'lower_bound': 1, 'result': True, 'upper_bound': 2}}, 'result': True}, 'metric2': {'details': {'baseline': {'actual': 0, 'lower_bound': 1, 'result': False, 'upper_bound': 2}}, 'result': True}, 'metricbool': {'details': None, 'result': True}} 
print(has_true(data))

输出:

False

答案 1 :(得分:0)

也许是有趣的骇客:

import sys, copy

def contains_False(obj):
    r0 = sys.getrefcount(False)
    _ = copy.deepcopy(obj)
    r1 = sys.getrefcount(False)
    return r1 > r0