如何实现嵌套列表按首个相同元素去重并合并对应数值?
嵌套列表按首元素聚合的实现方案
你可以借助字典的唯一键特性做中间存储,完成同产品名的数值累加合并,具体实现逻辑和代码如下:
- 用子列表第一个元素(产品名)作为字典的key,后续数值作为value存储
- 遍历原列表时,若key不存在则直接存入,若已存在则对对应位置的数值做累加
- 最后将字典重新组装为嵌套列表格式即可得到目标结果
product_list = [['product_1', 50, 33, 17], ['product_2', 10, 5, 0], ['product_3', 9, 4, 5], ['product_2', 8, 4, 1]] temp_dict = {} for item in product_list: product_key = item[0] values = item[1:] if product_key not in temp_dict: temp_dict[product_key] = values else: # 对应位置数值累加 temp_dict[product_key] = [a + b for a, b in zip(temp_dict[product_key], values)] # 转换为目标列表格式 aim_list = [[key] + val for key, val in temp_dict.items()]
提示:Python 3.7及以上版本默认字典保留插入顺序,输出列表的元素顺序和产品首次出现的顺序一致;如果使用更低版本的Python且需要保序,可以用
collections.OrderedDict替换普通字典,其余逻辑无需修改。
运行上述代码输出的aim_list和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者zhiyu wu
相关产品推荐
相关产品推荐

