递归遍历方法展平多维嵌套列表、元组、字典所有值

递归遍历方法展平多维嵌套列表、元组、字典数据

问题背景:

平时在数据处理中,经常会遇到需要将多维嵌套的列表或元组类型数据进行展平,获得其中的各个元素,一两层的很好处理,但是嵌套层数多了就比较麻烦,通常处理方法是一层一层的剥开,,一层层判断,取出元素比较麻烦,往往会因此思考半天,甚至停滞不前,本文就是为了解决这个问题。

不妥之处,还请各位大佬多多点评指正,互相学习进步!

解决问题:

将多层嵌套的列表数据或元组数据,通过递归遍历方法提取出来,输出为一维的列表数据类型,实现多维嵌套列表、元组数据展平方法;

说明:

1、代码1只对列表、元组类型数据进行展平,字典类型不做处理;

2、代码2在代码1的基础上增加了对字典中所有值的处理方法,提取了字典中的所有值作为展开对象输出;

 

【展平多维嵌套列表、元组数据】的思路和方法与【遍历多维嵌套字典、列表、元组的数据查找指定键对应的值】的类似,直接上代码:

代码1:

 1 # 展平多维嵌套列表、元组
 2 
 3 # 测试嵌套列表
 4 test_list1 = [1,['2','3','4'],[5,[6,7,8],[9]]]
 5 test_list2 = [1,['2','3','4'],[5,(11,12,13),6,[7,8],[9]]]
 6 test_list3 = [1,['2','3','4'],[5,(11,12,13),6,[(7,8)],(9)]]
 7 test_list4 = [{'a':['1',2],'b':2},(1,2,[23,24,{'c':'cd'}],3),[4,[45,[456,(6,7,[8,{'d':'e'}])]]]]
 8 
 9 
10 def Flatten_List_And_Tuple(input_list,tmp_list):
11     # 判断输入是否为列表数据类型
12     if not isinstance(input_list,(list,tuple)) and not isinstance(tmp_list,list):
13         return "input_list:输入参数错误;tmp_list:输入参数错误"
14 
15     # 列表剥层处理
16     for element in input_list:
17         # 数据类型不为列表、元组、字典时,则存入储存列表中
18         if not isinstance(element,(list,tuple)):
19             tmp_list.append(element) 
20 
21         # 数据类型为列表、元组时,回调本身,剥层处理
22         else:
23             Flatten_List_And_Tuple(element,tmp_list)
24     return tmp_list
25 
26 print(Flatten_List_And_Tuple(test_list4,[]))

输出结果如下:

从代码上看,与上一篇思路和结构上极其相似。

 

代码2:

 1 # 递归遍历展平列表、元组、字典所有值
 2 def Flatten_dict_List_Tuple(input_list,tmp_list):
 3     # 判断输入是否为列表数据类型
 4     if not isinstance(input_list,(list,tuple)) and not isinstance(tmp_list,list):
 5         return "input_list:输入参数错误;tmp_list:输入参数错误"
 6 
 7     # 列表剥层处理
 8     for element in input_list:
 9         # 数据类型不为列表、元组、字典时,则存入储存列表中
10         if not isinstance(element,(list,tuple,dict)):
11             tmp_list.append(element) # 存入列表tmp_list中
12 
13         # 数据类型为字典时,将字典的值传入,回调本身
14         elif isinstance(element,dict):
15             Flatten_dict_List_Tuple(element.values(),tmp_list)
16 
17         # 数据类型为列表、元组时,回调本身    
18         else:
19             Flatten_dict_List_Tuple(element,tmp_list)
20     return tmp_list
21 
22 print(Flatten_dict_List_Tuple(test_list4,[]))

代码2输出结果如下:

将代码1稍作处理,即可实现对字典的所有值也进行展平!

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