展开多重嵌套的复杂数据(列表、字典等)
方法块:
def data_flatten(key,val,con_s='_',basic_types=(str,int,float,bool,complex,bytes)):
"""
数据展开生成器,以键值对为最基础的数据
param key: 键,默认为基础类型数据,不做进一步分析
param val: 值,判断值的数据类型,如果为复杂类型就做进一步分析
param con_s: 拼接符,当前级的键与父级键拼接的连接符,默认为_
param basic_types: 基础数据类型元组,如果值的类型在元组之内,则可以输出
return: 键值对元组
"""
if isinstance(val, dict):
for ck,cv in val.items():
yield from data_flatten(con_s.join([key,ck]).lstrip('_'), cv)
elif isinstance(val, (list,tuple,set)):
for item in val:
yield from data_flatten(key,item)
elif isinstance(val, basic_types) or val is None:
yield str(key).lower(),val
样例数据:
test_dict = {
'a':1,
'b':2,
'c':[1,2,3,4,{'a':1,'b':2,'c':3}],
'd':{
'a':2,
'b':3,
'c':('1','2','3'),
'd':{
'a':1,
'b':['True','False']
}
},
'e':{123,3,34,'les'}
}
调用举例:
for i in data_flatten('',test_dict):
print(i)
执行结果: