【发布时间】:2013-02-04 10:18:01
【问题描述】:
我正在尝试编写一个非常简单的函数来递归搜索可能嵌套的(在最极端的情况下十层深)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。
但是,对于_finditem({"B":1,"A":2},"A"),它确实有效,返回2。
我确定这是一个简单的错误,但我找不到它。我觉得标准库或collections 中可能已经有相关内容,但我也找不到。
【问题讨论】:
-
请注意,检查它是否是
dict对象是个坏主意,因为它排除了类似dict的对象。相反,请执行try: ...except TypeError: ...。 (请求宽恕,而不是许可)。 -
还要注意,由于字典本质上是无序的,如果你的嵌套结构中有多个键“A”,你永远不知道你会得到哪一个(就像一盒巧克力我想。 ..)
-
@mgilson 在这个特定的情况下,没关系,我考虑过。 :)
-
@frb -- 我认为它可能没问题,我只是想确保它被记录在某个地方:)。
标签: python search recursion dictionary