如何对二维数组去重并累加重复元素对应数值
二维数组同名字段累加去重实现方案
核心实现逻辑很简单,分三步处理即可:
- 用字典做中间存储结构,以不重复的物质名称作为字典键,对应累计数量作为字典值
- 遍历原数组的每一条记录,遇到已存在的物质名称就累加数量,不存在就直接写入初始值
- 遍历完成后把字典转回要求的二维列表格式
无依赖基础实现
不需要引入任何额外库,全版本Python通用:
total_list = [['Argon', 1], ['Hematite', 1], ['Organic', 1], ['Argon', 1], ['Hematite', 1], ['Organic', 1], ['Graphite', 2], ['Ammonium', 4], ['Hydrogen', 2]] count_map = {} for material, quantity in total_list: if material in count_map: count_map[material] += quantity else: count_map[material] = quantity # 转换为要求的二维数组格式 result = [[item, count] for item, count in count_map.items()]
针对你给出的测试用例,运行后得到的结果为:[['Argon', 2], ['Hematite', 2], ['Organic', 2], ['Graphite', 2], ['Ammonium', 4], ['Hydrogen', 2]],和你举例的片段处理规则完全匹配。
简洁版标准库实现
如果允许使用Python标准库,可以用collections.defaultdict省略键存在判断,代码更精简:
from collections import defaultdict total_list = [['Argon', 1], ['Hematite', 1], ['Organic', 1], ['Argon', 1], ['Hematite', 1], ['Organic', 1], ['Graphite', 2], ['Ammonium', 4], ['Hydrogen', 2]] count_map = defaultdict(int) for material, quantity in total_list: count_map[material] += quantity result = [[item, count] for item, count in count_map.items()]
注意:Python 3.7及以上版本的原生字典默认保留插入顺序,最终输出的物质顺序和该物质第一次在原列表出现的顺序一致;如果是更低版本Python且需要保留插入顺序,可以把中间存储的字典替换为collections.OrderedDict即可。
内容的提问来源于stack exchange,提问作者meep
相关产品推荐
相关产品推荐

