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

Python字典键值互换:将感染统计数据的大洲设为一级键、年份设为二级键

字典层级调整实现说明

需求

将现有统计结果的键值层级互换,使大洲成为字典一级键,年份成为二级键。

现有实现代码

from typing import List, Dict, Any

def get_most_infected_continents() -> List[Dict[str, Any]]:
    """计算感染人数最多的大洲"""
    lst : List = list()
    string = ""
    for i in range(1990, 2021):
        dict2 = {}
        dict3 = {}
        dict1 = {}
        for dct in dataset:
            if dct[str(i)] == -1 or dct['continent'] == "Global":
                continue
            if dct["continent"] not in dict2 :
                dict2[dct["continent"]] = dct[str(i)]
            else:
                dict2[dct["continent"]] += dct[str(i)]
        maxim = 0
        for key in dict2:
            if int(dict2[key]) > maxim:
                maxim = dict2[key]
                string = key
        dict3[string] = maxim
        dict1[str(i)] = dict3
        lst.append(dict1)   
    return lst
get_most_infected_continents()

当前输出格式示例

[{'1990': {'Africa': 5736700}},
{'1991': {'Africa': 7026700}},
{'1992': {'Africa': 8423800}},
{'1990': {'Africa': 5736700}},
{'1991': {'Africa': 7026700}},
{'1992': {'Africa': 8423800}},....]

期望输出格式示例

{'Africa': {'1990': 5736700, '1991': 7026700, '1992': 8423800}, ...}

调整后可实现目标格式的代码

针对原始数据中存在<500、11 000这类非标准数值格式的情况,新增了数值清洗逻辑,确保统计结果准确:

from typing import Dict, Any
import re

def parse_num(num_str: str) -> int:
    """清洗原始数值字符串,转换为整数"""
    # 移除所有非数字字符
    clean_str = re.sub(r'[^0-9]', '', num_str)
    return int(clean_str) if clean_str else 0

def get_most_infected_continents() -> Dict[str, Dict[str, int]]:
    """计算感染人数最多的大洲,返回大洲为一级键的字典结构"""
    result = {}
    for year in range(1990, 2021):
        year_str = str(year)
        continent_sum = {}
        # 按年份统计各大洲总感染数
        for dct in dataset:
            if dct['continent'] == "Global":
                continue
            num = parse_num(dct[year_str])
            if num == -1:
                continue
            if dct["continent"] not in continent_sum:
                continent_sum[dct["continent"]] = num
            else:
                continent_sum[dct["continent"]] += num
        # 找当前年份感染数最高的大洲
        max_cnt = 0
        max_continent = ""
        for continent, cnt in continent_sum.items():
            if cnt > max_cnt:
                max_cnt = cnt
                max_continent = continent
        # 写入结果字典
        if max_continent not in result:
            result[max_continent] = {}
        result[max_continent][year_str] = max_cnt
    return result

get_most_infected_continents()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:27:05