首页 > 其他 > 详细

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

时间:2021-02-16 10:04:48      阅读:53      评论: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 版权所有
打开技术之扣,分享程序人生!