我正在尝试编写一个非常简单的函数来递归地搜索可能嵌套的(在最极端的情况下是十层深) Python字典,并返回它从给定键中找到的第一个值。
我不明白为什么我的代码不适用于嵌套字典。
def _finditem(obj, key):
if key in obj: return obj[key]
for k, v in obj.items():
if isinstance(v,dict):
_finditem(v, key)
print _finditem({"B":{"A":2}},"A")它返回None。
但是,它确实适用于返回2的_finditem({"B":1,"A":2},"A")。
我确定这是一个简单的错误,但我找不到。我觉得在标准库或collections中可能已经有了这方面的东西,但我也找不到。
发布于 2019-05-18 23:58:07
我不能对@mgilston提出的被接受的解决方案添加评论,因为缺乏声誉。如果要搜索的键在列表中,则解决方案不起作用。
循环遍历列表的元素并调用递归函数应该会扩展查找嵌套列表中的元素的功能:
def _finditem(obj, key):
if key in obj: return obj[key]
for k, v in obj.items():
if isinstance(v,dict):
item = _finditem(v, key)
if item is not None:
return item
elif isinstance(v,list):
for list_item in v:
item = _finditem(list_item, key)
if item is not None:
return item
print(_finditem({"C": {"B": [{"A":2}]}}, "A"))https://stackoverflow.com/questions/14962485
复制相似问题