【发布时间】:2019-10-24 13:22:19
【问题描述】:
我无法解决这个问题!我正在使用以下代码将 JSON 文件转换为 python 中的可读格式:
jsonDict = json.loads(jsonFile.read())
x = self.searchJSON('search_term', jsonDict)
然后使用这个递归函数循环遍历字典找到我需要的键。
def searchJSON(self, searchTerm, di=None):
for k in di:
if k == searchTerm:
return di[k]
if isinstance(k, dict):
self.searchJSON(searchTerm, k)
elif isinstance(k, list):
self.searchJSON(searchTerm, k[0])
elif isinstance(di[k], list) or isinstance(di[k], dict):
self.searchJSON(searchTerm, di[k])
使用它,我可以找到我正在寻找的值 - 没问题..但我需要将值返回到函数外部。
当我添加退货时:
def searchJSON(self, searchTerm, di=None):
for k in di:
if k == searchTerm:
return di[k]
if isinstance(k, dict):
return self.searchJSON(searchTerm, k)
elif isinstance(k, list):
return self.searchJSON(searchTerm, k[0])
elif isinstance(di[k], list) or isinstance(di[k], dict):
return self.searchJSON(searchTerm, di[k])
函数在遇到空列表时停止运行。我花了一整天的时间试图弄清楚这一点,这是我能够得到的最接近返回值的方法。
【问题讨论】:
-
如果你的函数不能处理空列表,那么当它遇到空列表时它不可能做任何事情。我知道这不是很有帮助,但是在递归方面,您应该始终有一个明确定义的基本案例。在这种情况下,当您的
k是一个列表时,空列表似乎是一个基本情况。但是di是什么?那是字典吗?因为你不能使用list作为字典的键 -
是的,基本上你的函数总是有一个bug,而你还不知道。下面发布的答案显示了如何解决它。
-
第一次调用该函数时,
di是表示为列表的 JSON 文件。所以它包含列表、字典和一些空键。
标签: python json python-3.x dictionary