如何在Python中对列表内同名元素的quantidade字段值进行求和
实现相同name的quantidade求和的Python方案
嘿,这个需求在日常数据处理里挺常见的,我给你分享几种Python实现的方案,你可以根据自己的场景来选:
方法1:普通字典手动遍历(适合新手理解)
这种方法不需要依赖任何第三方库,逻辑直观,适合小数据量的场景:
# 原始数据 items = [{'name': 'Radio HF', 'quantidade': '1'}, {'name': 'Radio HF', 'quantidade': '1'}, {'name': 'chave fenda', 'quantidade': '2'}, {'name': 'Coletes salva-vidas', 'quantidade': '3'}] # 初始化空字典用来存累加结果 result_dict = {} for item in items: name = item['name'] # 注意:quantidade是字符串,要先转成整数才能求和 qty = int(item['quantidade']) if name in result_dict: # 如果name已经存在,就累加数量 result_dict[name] += qty else: # 如果是第一次遇到这个name,就初始化数量 result_dict[name] = qty # 把字典转回原来的列表字典格式(如果需要的话) final_result = [{'name': key, 'quantidade': str(value)} for key, value in result_dict.items()] print(final_result) # 输出:[{'name': 'Radio HF', 'quantidade': '2'}, {'name': 'chave fenda', 'quantidade': '2'}, {'name': 'Coletes salva-vidas', 'quantidade': '3'}]
方法2:用collections.defaultdict(更简洁高效)
Python标准库的collections.defaultdict可以帮我们省去判断键是否存在的步骤,代码更简洁,效率也更高:
from collections import defaultdict items = [{'name': 'Radio HF', 'quantidade': '1'}, {'name': 'Radio HF', 'quantidade': '1'}, {'name': 'chave fenda', 'quantidade': '2'}, {'name': 'Coletes salva-vidas', 'quantidade': '3'}] # 初始化一个默认值为0的字典 result_dict = defaultdict(int) for item in items: # 直接累加,不存在的键会自动初始化为0 result_dict[item['name']] += int(item['quantidade']) # 转回列表字典格式 final_result = [{'name': key, 'quantidade': str(value)} for key, value in result_dict.items()] print(final_result)
方法3:用Pandas(适合大数据量/数据分析场景)
如果你正在处理大量数据,或者本身就在用Pandas做数据分析,用groupby操作会非常方便:
import pandas as pd items = [{'name': 'Radio HF', 'quantidade': '1'}, {'name': 'Radio HF', 'quantidade': '1'}, {'name': 'chave fenda', 'quantidade': '2'}, {'name': 'Coletes salva-vidas', 'quantidade': '3'}] # 把列表转成DataFrame df = pd.DataFrame(items) # 将quantidade列转为整数类型 df['quantidade'] = df['quantidade'].astype(int) # 按name分组,对quantidade求和 grouped_df = df.groupby('name')['quantidade'].sum().reset_index() # 转回列表字典格式 final_result = grouped_df.to_dict('records') # 如果需要quantidade保持字符串类型,可以这样处理: # final_result = [{'name': row['name'], 'quantidade': str(row['quantidade'])} for _, row in grouped_df.iterrows()] print(final_result)
选择建议
- 如果是小数据量,且不想引入额外依赖,选方法1或2;
- 如果是大数据量或者日常做数据分析,方法3会更高效便捷。
内容的提问来源于stack exchange,提问作者Nito Cesar
相关产品推荐
相关产品推荐

