从搜索JSON的递归函数返回值

2024-10-02 10:18:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我不能对这个问题束手无策!我使用以下代码将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])

函数遇到空列表时停止运行。我花了一整天的时间想弄明白这一点,这是我能得到的最接近返回值的结果


Tags: inselfnoneforreturnifdefdict
1条回答
网友
1楼 · 发布于 2024-10-02 10:18:50

试用(更新版):

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):
            if k:
                return self.searchJSON(searchTerm, k[0])
            else:
                pass

        elif isinstance(di[k], list) or isinstance(di[k], dict):
            if di[k]:
                return self.searchJSON(searchTerm, di[k])
            else:
                pass

相关问题 更多 >

    热门问题