遍历多维嵌套字典、列表、元组的数据查找指定键对应的值

本文是参考博主【_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)

 

运行结果:

 

posted @ 2021-02-16 09:18  猎奇会员  阅读(138)  评论(0)    收藏  举报