Python中如何按位置而非指定键选取字典中的多个元素?
解决思路与优化代码
问题根源
你原来的代码用普通字典存排序后的结果,哪怕Python 3.7+的字典是有序的,也没法像列表那样用索引切片取最后5个元素。而且排序逻辑用了嵌套循环匹配值和键,不仅效率低,还可能因为多个国家排放量相同导致数据覆盖。
优化方案
直接对国家-排放量的键值对按排放量降序排序,然后取前5个(比升序取最后5个更直观),用列表存储排序后的结果,这样就能直接通过索引访问。
优化后的代码
# 遍历1990到2019年(共30年) for year in range(1990, 2020): year_str = str(year) global_emissions = {} # 构建当年各国排放量字典,过滤缺失数据(比如NaN) for country in dataset: emissions = country.get(year_str) # 跳过无数据的情况 if emissions is not None and not isinstance(emissions, str): global_emissions[country['COUNTRY']] = emissions # 按排放量降序排序,得到列表,每个元素是(国家名, 排放量) sorted_items = sorted(global_emissions.items(), key=lambda x: x[1], reverse=True) # 取排放量最高的5个国家 top5_emissions = sorted_items[:5] # 这里可以添加可视化代码,比如用matplotlib绘制top5的数据 print(f"===== {year}年排放量Top5 =====") for country, value in top5_emissions: print(f"{country}: {value} kt")
关键说明
- 用
country.get(year_str)替代直接取键,避免因缺失年份键报错 - 排序时用
lambda x: x[1]指定按元组的第二个元素(排放量)排序,reverse=True实现降序 sorted_items是列表,支持切片[:5]直接获取前5个最高排放的国家数据,后续可视化时可以直接提取国家名和排放量:# 提取国家名和排放量 top_countries = [item[0] for item in top5_emissions] top_values = [item[1] for item in top5_emissions] # 比如用柱状图展示 import matplotlib.pyplot as plt plt.bar(top_countries, top_values) plt.title(f"{year}年CO₂排放量Top5国家") plt.ylabel("排放量(kt)") plt.show()
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

