如何从字典列表统计全年销售额?缺失月份按0计算
问题与解决方案
问题描述
我有如下字典列表数据:
[ {'account': 'Amazon', 'amount': 300, 'day': 3, 'month': 'June'}, {'account': 'Facebook', 'amount': 550, 'day': 5, 'month': 'May'}, {'account': 'Google', 'amount': -200, 'day': 21, 'month': 'June'}, {'account': 'Amazon', 'amount': -300, 'day': 12, 'month': 'June'}, {'account': 'Facebook', 'amount': 130, 'day': 7, 'month': 'September'}, {'account': 'Google', 'amount': 250, 'day': 27, 'month': 'September'}, {'account': 'Amazon', 'amount': 200, 'day': 5, 'month': 'May'} ]
目前我使用以下代码仅能统计出五月、六月、九月的金额总和:
year_balance = sum(d["amount"] for d in my_dict) print(f"The total year balance is {year_balance} $.")
请问如何编写代码,将字典中未提及的月份金额按0计算,从而得到全年的总销售额?
解决方案
首先明确:仅计算全年总销售额的话,你原代码的结果就是正确的——因为未提及的月份金额为0,加0不会改变总和。但如果需要同时统计每个月的金额(包括未发生交易的月份显示0),再计算全年总和,可以用以下两种方法:
方法1:手动初始化全年月份字典
先定义全年12个月份,初始化每个月金额为0,再遍历数据更新对应月份的金额,最后求和:
# 定义全年所有月份 all_months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] # 初始化每月金额,默认值为0 monthly_balance = {month: 0 for month in all_months} # 遍历数据,累加对应月份的金额 for entry in my_dict: monthly_balance[entry['month']] += entry['amount'] # 计算全年总销售额 total_year_sales = sum(monthly_balance.values()) # 可选择打印每月明细和全年总和 print("每月销售额明细:") for month, amount in monthly_balance.items(): print(f"{month}: {amount} $") print(f"\n全年总销售额:{total_year_sales} $")
方法2:用collections.defaultdict简化统计
先用defaultdict统计已有月份的金额,再遍历全年月份,用get方法默认取0,最后求和:
from collections import defaultdict # 统计已有月份的累计金额 monthly_balance = defaultdict(int) for entry in my_dict: monthly_balance[entry['month']] += entry['amount'] # 定义全年所有月份 all_months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] # 计算全年总和:已有月份金额 + 未出现月份的0 total_year_sales = sum(monthly_balance.get(month, 0) for month in all_months) print(f"全年总销售额:{total_year_sales} $")
内容的提问来源于stack exchange,提问作者eolcos
相关产品推荐
相关产品推荐

