急!递归方法,从data大字典中找出特定key的value值

题目描述

从data大字典中找出特定键GlossTerm的value值

题目来源及自己的思路

题目来自面试笔试题
我的思路是先将json格式data序列化得到字典格式data
然后递归遍历
找到目标键后退出递归并返回它的值

import json
data = json.loads(data)


def get_key_node(dict_data,obj_key):
    for key,value in dict_data.items():
        if value:
            if not isinstance(value,dict):
                if key==obj_key:
                    print(value)
                    return value
            else:
                get_key_node(value,obj_key)


print(get_key_node(data,"GlossTerm"))

相关代码

data = '''{
"glossary": {
    "title": "example glossary",
    "GlossDiv": {
        "title": "S",
        "GlossList": {
            "GlossEntry": {
                "ID": "SGML",
                "SortAs": "SGML",
                "GlossTerm": "Standard Generalized Markup Language",
                "Acronym": "SGML",
                "Abbrev": "ISO 8879:1986",
                "GlossDef": {
                    "para": "A meta-markup language, used to create markup languages such as DocBook.",
                    "GlossSeeAlso": ["GML", "XML"]
                },
                "GlossSee": "markup"
            }
        }
    }
}

}'''
import json
data = json.loads(data)

def get_key_node(dict_data,obj_key):

for key,value in dict_data.items():
    if value:
        if not isinstance(value,dict):
            if key==obj_key:
                print(value)
                return value
        else:
            get_key_node(value,obj_key)

print(get_key_node(data,"GlossTerm"))

你期待的结果是什么?实际看到的错误信息又是什么?

期待的结果是

'Standard Generalized Markup Language

可我的方法结果是

None
阅读 5.4k
3 个回答

我记得回答过你类似的问题?基于你的代码改的

def get_dictkeys(dic, find_key):
    find_value = 'no'
    for key, value in dic.items():
        if key == find_key:
            find_value = value
        elif isinstance(value, dict):
            find_value = get_dictkeys(value, find_key)
    if find_value == 'no':
        return 'dict doesnt have this key'
    else:
        return find_value
print get_dictkeys(data, "GlossTerm")

逻辑没问题啊,只是少了一个return 而已,加了return就OK了(代码还是你的代码)

def get_key_node(dict_data,obj_key):

for key,value in dict_data.items():
    if value:
        if not isinstance(value,dict):
            if key==obj_key:
                print(value)
                return value
        else:
            return get_key_node(value,obj_key)

print(get_key_node(data,"GlossTerm"))

试试这样:

result = []

def get_key_node(dict_data, obj_key):
    v = dict_data.get(obj_key)
    if v is not None:
        result.append(v)
    for value in dict_data.values():
        if isinstance(value, dict):
            get_key_node(value, obj_key)
            
print(result)            
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题