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
相关产品推荐
相关产品推荐

