如何基于元素值合并Python嵌套列表中相同标识的子列表?
合并嵌套子列表的解决方法
问题根因
你代码生成的字典出现嵌套列表,是因为使用了append()方法:该方法会将传入的整个列表作为单个元素添加到目标列表末尾,而你需要的是将传入列表的元素逐个追加到目标列表中,改用extend()方法即可解决这个问题。
修正后完整代码
lis = [['steve','reporter','12','34','22','98'],['megan','arch','44','98','32','22'],['jack','doctor','80','32','65','20'],['steve','dancer','66','31','54','12']] new_dic = {} for item in lis: name = item[0] # 直接切片取首元素之外的所有内容,无需手动逐个写索引 rest_content = item[1:] if name in new_dic: # 用extend逐个追加元素,不会产生嵌套 new_dic[name].extend(rest_content) else: new_dic[name] = rest_content.copy() # 将字典转换为目标格式的嵌套列表 new_lis = [[name] + values for name, values in new_dic.items()] print(new_lis)
运行输出
[['steve', 'reporter', '12', '34', '22', '98', 'dancer', '66', '31', '54', '12'], ['megan', 'arch', '44', '98', '32', '22'], ['jack', 'doctor', '80', '32', '65', '20']]
补充说明
Python 3.7及以上版本默认会保留字典的插入顺序,最终输出的列表顺序和原列表中名字首次出现的顺序完全一致,如果你使用的是更早的Python版本,可以引入collections.OrderedDict替代普通字典来保证顺序一致。
内容的提问来源于stack exchange,提问作者xionxavier
相关产品推荐
相关产品推荐

