首页 > 其他 > 详细

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

时间:2021-02-16 10:04:48      阅读:58      评论:0      收藏:0      [点我收藏+]

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

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!