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

嵌套字典转MultiIndex DataFrame报AttributeError如何解决

报错原因

你使用的字典推导式默认所有外层键对应的值都是字典类型,会统一调用.items()方法遍历内层键值对,但你的测试字典里season对应的值是字符串、threshold对应的值是整数,二者都没有.items()方法,遍历到这两个键时就会触发AttributeError: 'str' object has no attribute 'items'报错。
你参考的实现仅适用于所有外层键对应值均为字典的纯嵌套结构,无法兼容顶层存在非字典值的混合结构字典。

修复方案

遍历字典时增加类型判断,对非字典类型的顶层值做兼容处理,将其映射到多层索引的对应层级后再转为DataFrame,可直接运行的代码如下:

import pandas as pd

my_dict = {"season":"summer", "threshold":70, "analysis" : {"max_temp":50, "min_temp":20}}

reform = {}
for outer_key, value in my_dict.items():
    # 处理嵌套字典分支
    if isinstance(value, dict):
        for inner_key, inner_val in value.items():
            reform[(outer_key, inner_key)] = inner_val
    # 处理顶层非字典值分支,内层索引默认用空字符串占位,可按需替换为自定义标识
    else:
        reform[(outer_key, "")] = value

# 转换为列是MultiIndex的DataFrame
df = pd.Series(reform).unstack().T

运行后得到的DataFrame列即为两层MultiIndex结构:

  • 第一层索引为原字典的顶层键:season、threshold、analysis
  • 第二层索引对应嵌套字典的内层键:season和threshold下为空占位,analysis下为max_temp、min_temp
  • 单元格值与原字典值一一对应

如果不需要空字符串作为内层索引占位,也可以将非字典值分支的内层键替换为自定义名称,比如"value",匹配你自己的索引命名规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:42:19