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

嵌套字典转DataFrame时遇语法错误?求解决方案

解决嵌套字典转DataFrame时的TypeError: unhashable type: 'dict'问题

问题原因

报错TypeError: unhashable type: 'dict'通常是因为嵌套字典中存在字典作为键,或是展开字典时误将子字典当作可迭代键值对处理,而DataFrame无法直接解析不可哈希的字典类型。

解决方案

以下针对两种常见的特殊嵌套结构给出对应处理方法:

情况1:多层嵌套字典(值为子字典)

假设你的示例字典结构如下:

sample_dict = {
    "user1": {"name": "Alice", "age": 25, "contact": {"email": "alice@test.com", "phone": "12345"}},
    "user2": {"name": "Bob", "age": 30, "contact": {"email": "bob@test.com"}}
}

之前尝试的直接转换代码(如pd.DataFrame(sample_dict))会报错,可通过递归展开字典为扁平结构解决:

import pandas as pd

def flatten_nested_dict(d, parent_key="", sep="_"):
    flattened_items = []
    for key, value in d.items():
        combined_key = f"{parent_key}{sep}{key}" if parent_key else key
        if isinstance(value, dict):
            flattened_items.extend(flatten_nested_dict(value, combined_key, sep).items())
        else:
            flattened_items.append((combined_key, value))
    return dict(flattened_items)

# 逐个展开子字典并整理为列表
flattened_data = [flatten_nested_dict(user_data) for user_data in sample_dict.values()]
# 转换为DataFrame
df = pd.DataFrame(flattened_data, index=sample_dict.keys())

最终得到的DataFrame格式:

nameagecontact_emailcontact_phone
user1Alice25alice@test.com12345
user2Bob30bob@test.comNaN

情况2:字典作为键的特殊结构

如果你的字典存在字典作为键的情况(如{ {"id": 1}: {"score": 90} }),需先将字典键转换为可哈希类型(如字符串或元组):

import pandas as pd

def normalize_dict_keys(d):
    normalized = {}
    for key, value in d.items():
        # 将字典键转为字符串
        new_key = str(key) if isinstance(key, dict) else key
        # 递归处理值中的嵌套字典
        if isinstance(value, dict):
            normalized[new_key] = normalize_dict_keys(value)
        else:
            normalized[new_key] = value
    return normalized

# 处理字典键
processed_dict = normalize_dict_keys(your_target_dict)
# 转换为DataFrame
df = pd.DataFrame.from_dict(processed_dict, orient="index").reset_index().rename(columns={"index": "original_key"})

自定义结构适配

如果上述方案不符合你的实际字典结构,可提供具体的示例字典和期望的DataFrame格式,能给出更精准的转换代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:20:26