You need to enable JavaScript to run this app. Python 列表内不同字典相同key对应数值累加的Pythonic实现咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python 列表内不同字典相同key对应数值累加的Pythonic实现咨询

Pythonic实现方案

方案1:使用collections.defaultdict(标准库实现,性能最优,推荐优先使用)

时间复杂度为O(n),无需提前排序,Python3.7+版本可自动保留原列表中Name首次出现的顺序:

from collections import defaultdict

sum_dict = defaultdict(int)
for item in my_list:
    sum_dict[item["Name"]] += item["Amount"]

# 转换为目标格式的字典列表
my_list_2 = [{"Name": name, "Amount": amount} for name, amount in sum_dict.items()]

方案2:使用itertools.groupby(函数式风格写法)

groupby仅能将连续的同键元素分为一组,所以需要先按Name排序,时间复杂度为O(nlogn),适合小数据量场景:

from itertools import groupby

my_list_2 = [
    {"Name": name, "Amount": sum(item["Amount"] for item in group)}
    for name, group in groupby(sorted(my_list, key=lambda x: x["Name"]), key=lambda x: x["Name"])
]

方案3:基于pandas实现(项目已引入pandas时最简洁)

import pandas as pd

# 加sort=False可保留原列表Name首次出现的顺序,默认按Name字典序排序
my_list_2 = pd.DataFrame(my_list).groupby("Name", as_index=False, sort=False)["Amount"].sum().to_dict("records")

注:如果对输出结果的顺序有要求,优先选择方案1或者方案3调整sort参数实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 20:06:02