gpt4 book ai didi

python - 遍历 Python 字典中的嵌套键并在第一次出现时中断

转载 作者:太空宇宙 更新时间:2023-11-04 08:47:33 25 4
gpt4 key购买 nike

我有一个像下面这样的 JSON 字典:

             "{
"a":1,
"b":{
"b1":False,
"b2":{"b21": 2, "b22":8}
},
"c": {
"b1":True,
"b2":2,
"b4":8
},
"d":{
"b1":False,
"d1":89
}
}"

我想查看字典中"b1"键的值,找到b1=True就退出。如果我检查整个字典(包括嵌套键),但没有找到 b1=True,那么我想返回 False。对于上面的示例,我的函数应该返回 True。

基本上,我想在第一次出现 b1=True 时打破代码并遍历字典的所有键(在所有级别),如果不存在这种情况,则返回 False .

这是我想出的:

def isb1True(jsonDoc):
found = False
for (key,value) in jsonDoc.iteritems():
if key=='b1':
if value==True :
found=True
break
else:
isb1True(value)
return found

我的代码总是返回 False

最佳答案

您还需要从递归 调用中返回,并使用它来通知您是否要继续循环;您的代码忽略了递归 isb1True(value) 调用返回的内容。

您可以使用 any() function短路测试递归值:

def isb1true(d):
if not isinstance(d, dict): return False
return any(v if k == 'b1' else isb1true(v) for k, v in d.iteritems())

以上对任何不是 'b1' 的键进行递归,当该值不是字典时递归停止(在这种情况下它不会是 b1所以结果不是 'b1': True 情况)。

我假设 'b1' 总是设置为 bool 值;对于该键的任何“真实”值,以上代码返回 True

一些测试用例:

>>> isb1true({'b1': True})
True
>>> isb1true({'b1': False})
False
>>> isb1true({'b': {'b1': True}})
True
>>> isb1true({'b': {'b1': False}})
False
>>> isb1true({'b': {'c': True, 'spam': 'eggs', 'ham': {'bar': 'baz', 'b1': True}}})
True
>>> isb1true({'b': {'c': True, 'spam': 'eggs', 'ham': {'bar': 'baz'}}})
False

关于python - 遍历 Python 字典中的嵌套键并在第一次出现时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com