python-以嵌套列表结构聚合数据

我有一个带有嵌套子列表的列表,具有以下结构

in_data = 
 [
   [
     ['name','name_1'],['item_B','2'],['item_C','3'],['item_D','4']
   ],[
     ['name','name_2'],'5'],['item_A','2']
   ],'name_3'],'6'],'7']
   ]
]

我正在尝试收集in_data中的所有数据,并创建一个包含子列表的唯一列表,其中包含所有“标头” / 名称,并为每个项目加上一个正确的值。 因此,信息被保留,但是处于不同的数据结构中。

我要获得此列表

res_list = 
[
  ['name',' name_1',' name_2','2','5','3','-','7'],'4','-'],'-'] 
]

我正在尝试以最蟒蛇的方式做到这一点。我尝试了for循环,还尝试了map()+ lambda,但没有成功。

会是简单的方法吗?

zjqgd 回答:python-以嵌套列表结构聚合数据

优化方法(由复合字典键(<skill name>,<column name>)dict.get方法提供支持)

header = ['names']
names = set()
d = {}

for lst in in_data:
    col_name = lst[0][-1]
    header.append(col_name)
    for name,val in lst[1:]:
        names.add(name)
        d[name,col_name] = val

res = [[n,*[d.get((n,h),'-') for h in header[1:]]] for n in names]
res.insert(0,header)
print(res)

输出:

[['names','name_1','name_2','name_3'],['item_C','3','-','7'],['item_D','4','-'],['item_B','2','5','6'],['item_A','-']]
,

您可以使用collections.defaultdict

import collections
in_data = [[['name','name_1'],'2'],'3'],'4']],[['Skill','name_2'],'5'],'2']],'7']]]
d = [list(zip(['name',*b[0][1:]],i)) for b in in_data for i in b[1:]]
new_d = collections.defaultdict(dict)
for i in d:
   new_d[dict(i)['name']][i[-1][0]] = i[-1][-1]

all_names = list({i for b in new_d.values() for i in b})[::-1]
result = [['name',*all_names],*[[a,*[b.get(k,'-') for k in all_names]] for a,b in new_d.items()]]

输出:

[['name','-']]
本文链接:https://www.f2er.com/3128577.html

大家都在问