Python中合并多个字典并按年份汇总Total值的方法
解决方案
首先要指出你给出的州字典写法存在问题:Python 字典不允许重复键,像 Indiana = {Year:2018, Total:102, Year:2017, Total:84....} 这种写法会直接覆盖重复的键,最终每个州的字典只会保留最后一组 Year 和 Total,完全不符合数据存储需求。
先把数据改成合理结构,再实现按年份汇总的功能,下面分两种常见的合理结构给出实现代码:
情况1:每个州的字典以年份为键,Total为值
示例数据:
Indiana = {2018: 102, 2017: 84} Alabama = {2018: 115, 2017: 116} Colorado = {2018: 71, 2017: 76}
汇总代码:
# 把所有州的字典存入一个列表 state_data = [Indiana, Alabama, Colorado] continentals = {} for state in state_data: for year, total in state.items(): if year in continentals: continentals[year] += total else: continentals[year] = total # 若需要转换成「Year/Total 成对」的结构(注意:Python 字典不支持重复键,因此用列表嵌套字典) continentals_list = [{"Year": year, "Total": total} for year, total in continentals.items()] print(continentals_list)
情况2:每个州的数据是包含年份和Total的字典列表
示例数据:
Indiana = [{"Year": 2018, "Total": 102}, {"Year": 2017, "Total": 84}] Alabama = [{"Year": 2018, "Total": 115}, {"Year": 2017, "Total": 116}] Colorado = [{"Year": 2018, "Total": 71}, {"Year": 2017, "Total": 76}]
汇总代码:
state_data = [Indiana, Alabama, Colorado] continentals = {} for state in state_data: for entry in state: year = entry["Year"] total = entry["Total"] if year in continentals: continentals[year] += total else: continentals[year] = total # 转换成列表嵌套字典的结构 continentals_list = [{"Year": year, "Total": total} for year, total in continentals.items()] print(continentals_list)
重要说明
你想要的 Continentals = {Year:2018, Total:xxx, Year:2017, Total:xxx} 结构在 Python 里无法实现,因为字典的键必须唯一,重复的 Year 和 Total 键会被直接覆盖。因此最终只能用「年份为键、汇总Total为值」的字典,或者列表嵌套字典的形式来存储每一年的汇总数据。
内容的提问来源于stack exchange,提问作者AutumnBurger
相关产品推荐
相关产品推荐

