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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:35:37