You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在字典列表中新增同name对应value总和的key?Pandas及Python实现

问题描述

给定如下字典列表:

[
    {'name': 'a', 'age': '20', 'value': '10'},
    {'name': 'a', 'age': '30', 'value': '15'},
    {'name': 'a', 'age': '40', 'value': '25'},
    {'name': 'b', 'age': '20', 'value': '11'},
    {'name': 'b', 'age': '30', 'value': '12'},
    {'name': 'b', 'age': '40', 'value': '13'}
]

需要为每个字典新增sum键,其值为相同name对应的所有value的总和,最终得到如下结果:

[
    {'name': 'a', 'age': '20', 'value': '10', 'sum': '50'},
    {'name': 'a', 'age': '30', 'value': '15', 'sum': '50'},
    {'name': 'a', 'age': '40', 'value': '25', 'sum': '50'},
    {'name': 'b', 'age': '20', 'value': '11', 'sum': '36'},
    {'name': 'b', 'age': '30', 'value': '12', 'sum': '36'},
    {'name': 'b', 'age': '40', 'value': '13', 'sum': '36'}
]
解决方案

Pandas实现方式

借助Pandas的分组聚合与合并功能可以快速实现需求,核心步骤如下:

  1. 将字典列表转为DataFrame,同时把value字段从字符串转为数值类型(否则无法直接求和)
  2. 按name分组计算对应value的总和
  3. 将求和结果合并回原始DataFrame
  4. 把sum字段转回字符串格式,再将DataFrame转为目标字典列表

示例代码:

import pandas as pd

# 原始数据
data = [
    {'name': 'a', 'age': '20', 'value': '10'},
    {'name': 'a', 'age': '30', 'value': '15'},
    {'name': 'a', 'age': '40', 'value': '25'},
    {'name': 'b', 'age': '20', 'value': '11'},
    {'name': 'b', 'age': '30', 'value': '12'},
    {'name': 'b', 'age': '40', 'value': '13'}
]

# 转为DataFrame并转换value类型
df = pd.DataFrame(data).astype({'value': int})
# 分组计算每个name的value总和
sum_df = df.groupby('name')['value'].sum().reset_index(name='sum')
# 合并原始数据与总和数据
result_df = df.merge(sum_df, on='name')
# 转换sum为字符串并转为字典列表
result = result_df.astype({'sum': str}).to_dict('records')

print(result)

标准Python实现方式

无需依赖第三方库,通过两次遍历即可完成需求:

  1. 第一次遍历:统计每个name对应的value总和
  2. 第二次遍历:为每个字典添加sum键(注意复制原字典,避免修改原始数据)

示例代码:

data = [
    {'name': 'a', 'age': '20', 'value': '10'},
    {'name': 'a', 'age': '30', 'value': '15'},
    {'name': 'a', 'age': '40', 'value': '25'},
    {'name': 'b', 'age': '20', 'value': '11'},
    {'name': 'b', 'age': '30', 'value': '12'},
    {'name': 'b', 'age': '40', 'value': '13'}
]

# 统计每个name的value总和
name_total = {}
for item in data:
    name = item['name']
    val = int(item['value'])
    name_total[name] = name_total.get(name, 0) + val

# 为每个字典添加sum键
result = []
for item in data:
    new_item = item.copy()
    new_item['sum'] = str(name_total[item['name']])
    result.append(new_item)

print(result)

内容的提问来源于stack exchange,提问作者DrZoidberg09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:32:45