本文是参考博主【_BingoHe】:https://www.cnblogs.com/Detector/p/8085460.html的代码,进行思考优化后的结果:
主要是为了处理JSON数据中多层嵌套的数据,根据指定的键取出对应的值;
优化内容:
1、不再对dic输入参数的类型进行限定,可接受字典、列表、元组多种数据类型输入;
2、减少了代码量,使代码结构更加清晰、易懂,方便阅读理解和学习;
1 # 遍历多维嵌套字典、列表、元组的数据查找键对应的值 2 3 # 测试多维嵌套字典数据 4 test_dic1 = {‘v‘: [{‘g‘: ‘6‘},[{‘g‘: ‘7‘}, [{‘g‘: 8}]]]} 5 test_dic2 = {‘a‘: ‘1‘, ‘g‘: ‘2‘, ‘c‘: {‘d‘: [{‘e‘: [{‘f‘: [{‘v‘: [{‘g‘: ‘6‘}, [{‘g‘: ‘7‘}, [{‘g‘: 8}]]]}, ‘m‘]}]}, ‘h‘, {‘g‘: [10, 12]}]}} 6 test_dic3 = {‘a‘:‘1‘,‘g‘:{‘g‘:‘1‘},‘c‘:[{‘g‘:‘2‘}],‘d‘:{‘a‘:[‘1‘,{‘g‘:‘a‘,‘b‘:4},{‘g‘:[‘b‘,{‘g‘:3},({‘g‘:4},{‘g‘:({‘g‘:5})})]}]}} 7 8 # 目标键名称,嵌套数据,储存变量 9 def Get_Target_Value(key,dic,tmp_list): 10 """ 11 :param key:目标key值 12 :param dic:JSON数据 13 :param tmp_list:储存获取的数据 14 :return: list 15 """ 16 # 输入参数判断 17 if not isinstance(tmp_list,list): 18 return ‘tmp_list: 参数类型错误!‘ 19 20 # 非字典类型(列表、元组)输入,进剥层处理 21 if isinstance(dic,(list,tuple)): 22 # 非字典类型,则遍历元素深入查找 23 for v in dic: 24 Get_Target_Value(key,v,tmp_list) 25 26 # 字典类型输入,进行遍历查找处理 27 elif isinstance(dic,dict): 28 # 查找本层字典 29 if key in dic.keys(): 30 tmp_list.append(dic[key]) # 传入数据存在则存入tmp_list 31 32 # 在本层字典的值中查找 33 for value in dic.values(): 34 Get_Target_Value(key,value,tmp_list) 35 return tmp_list 36 37 38 result = Get_Target_Value(‘g‘,test_dic3,[]) 39 print(result)
运行结果:
原文:https://www.cnblogs.com/lieqi-vip/p/14406075.html