合并数组中匹配name和surname的字典并对netWorth、salary求和
方法1:使用pandas库(推荐,代码最简)
你可以直接用pandas库实现这类结构化数据的分组聚合需求,不用自己手写遍历判断逻辑,实现代码如下:
import pandas as pd d = [ {"name": "John", "surname": "Budd", "netWorth": "100000", "salary": "4700", "comment": "Cool"}, {"name": "Tedd", "surname": "Walker", "netWorth": "400000", "salary": "8000", "comment": "Nice"}, {"name": "John", "surname": "Budd", "netWorth": "300000", "salary": "5000", "comment": "Pretty"} ] # 转为DataFrame格式 df = pd.DataFrame(d) # 把要累加的字段转为数值类型 df[['netWorth', 'salary']] = df[['netWorth', 'salary']].astype(int) # 按姓名+姓氏分组求和,自动丢弃不参与计算的comment字段 result_df = df.groupby(['name', 'surname'], as_index=False)[['netWorth', 'salary']].sum() # 把数值转回字符串格式,匹配你要求的输出 result_df[['netWorth', 'salary']] = result_df[['netWorth', 'salary']].astype(str) result = result_df.to_dict('records') print(result)
运行后得到的result就和你给出的预期结果完全一致。
方法2:原生Python实现(无需安装第三方库)
如果你不想引入额外依赖,可以直接用字典做分组实现:
d = [ {"name": "John", "surname": "Budd", "netWorth": "100000", "salary": "4700", "comment": "Cool"}, {"name": "Tedd", "surname": "Walker", "netWorth": "400000", "salary": "8000", "comment": "Nice"}, {"name": "John", "surname": "Budd", "netWorth": "300000", "salary": "5000", "comment": "Pretty"} ] group_map = {} for item in d: # 用name+surname元组作为分组唯一键 key = (item['name'], item['surname']) if key not in group_map: group_map[key] = { 'name': item['name'], 'surname': item['surname'], 'netWorth': int(item['netWorth']), 'salary': int(item['salary']) } else: group_map[key]['netWorth'] += int(item['netWorth']) group_map[key]['salary'] += int(item['salary']) # 转回列表格式,数值转字符串匹配预期输出 result = [] for v in group_map.values(): v['netWorth'] = str(v['netWorth']) v['salary'] = str(v['salary']) result.append(v) print(result)
内容的提问来源于stack exchange,提问作者user15923317
相关产品推荐
相关产品推荐

