在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}}
答案 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