为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2019-02-18 19:04:36
题目描述 从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 jsondata = 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
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

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

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

查看完整回答
反对 回复 2019-03-01
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

试试这样:

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)            
查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 561 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信