鍍金池/ 問答/Python/ 急!遞歸方法,從data大字典中找出特定key的value值

急!遞歸方法,從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"))

相關(guān)代碼

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"))

你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?

期待的結(jié)果是

'Standard Generalized Markup Language

可我的方法結(jié)果是

None
回答
編輯回答
吃藕丑

我記得回答過你類似的問題?基于你的代碼改的

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")

2018年3月21日 07:58
編輯回答
扯機薄

試試這樣:

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)            
2017年10月23日 00:04
編輯回答
冷眸

邏輯沒問題啊,只是少了一個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"))

2017年10月27日 05:49