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

Jupyter Notebook做数据分析时函数返回字典顺序与print不一致如何解决

问题原因

  • 该顺序差异本质是Python字典的有序性规则差异:Python 3.6及更早版本的内置dict为无序结构,键的存储顺序和插入顺序无关;Python 3.7及以上版本才将「保留插入顺序」定为内置dict的官方语言特性。
  • 即便你使用的是3.7+版本,部分旧版本的Jupyter Notebook、数据序列化逻辑或第三方工具,也可能会自动对字典的键做字母排序后展示,你遇到的print输出正常、return结果顺序变化,大概率就是Jupyter的输出渲染逻辑默认触发了键排序。

解决方案

如果需要强制保证male键始终在前,最稳妥的跨版本兼容方案是使用Python标准库自带的collections.OrderedDict,它会严格保留键的插入顺序,不受Python版本和展示工具的影响。

修改后的代码示例:

def chickenpox_by_sex():
    import numpy as np
    import pandas as pd
    from collections import OrderedDict

    df = pd.read_csv("NISPUF17.csv")

    male_1dose_nopox = df[(df['P_NUMVRC'] >=1) & (df['HAD_CPOX'] == 1) & 
                       (df['SEX'] == 1)]
    female_1dose_nopox = df[(df['P_NUMVRC'] >=1) & (df['HAD_CPOX'] == 1) & (df['SEX'] == 2)]
    male_1dose_pox = df[(df['P_NUMVRC'] >=1) & (df['HAD_CPOX'] == 2) & (df['SEX'] == 1)]
    female_1dose_pox = df[(df['P_NUMVRC'] >=1) & (df['HAD_CPOX'] == 2) & (df['SEX'] == 2)]

    ratio_male = male_1dose_nopox.shape[0]/male_1dose_pox.shape[0]
    ratio_female = female_1dose_nopox.shape[0]/female_1dose_pox.shape[0]

    # 改用OrderedDict,严格保留插入顺序
    di = OrderedDict()
    di['male'] = ratio_male
    di['female'] = ratio_female

    print(di)
    return di

如果你的运行环境确定只使用Python 3.7及以上版本,也可以继续使用内置dict,只需关闭Jupyter的输出自动排序功能即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:27:01