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

如何用元组实现动态嵌套JSON结构?解决json.dump键报错

解决动态路径创建嵌套JSON结构的问题

这个问题我之前踩过坑!你遇到的TypeError根源很明确:JSON规范只允许字符串作为键,虽然Python字典支持用元组当键,但json.dump序列化时会严格校验键的类型,元组不符合要求就会报错。

直接用item[path] = "somevalue"的问题在于,你把整个元组('a','b','c')当成了字典的一个顶级键,而不是把它拆解成逐层嵌套的键,这显然不是你想要的效果。

正确实现方案:逐层构建嵌套字典

我们可以写一个简单的辅助函数,遍历路径中的每个键,逐层创建嵌套字典,最后设置目标值:

import json
import sys

def set_nested_dict_value(target_dict, key_path, value):
    current_level = target_dict
    # 遍历路径中除最后一个键之外的所有层级
    for key in key_path[:-1]:
        # 如果当前键不存在,就创建一个空字典作为值
        current_level = current_level.setdefault(key, {})
    # 给最后一层的键赋值
    current_level[key_path[-1]] = value

# 用法示例
item = {}
path = ('a', 'b', 'c')
set_nested_dict_value(item, path, 'somevalue')

# 序列化测试,现在不会报错了
json.dump(item, sys.stdout)

代码解释

  • setdefault(key, {}):这个方法会检查当前字典中是否存在指定键,如果不存在就创建它并赋值为空字典,同时返回这个字典;如果存在则直接返回对应的值,完美帮我们逐层构建嵌套结构。
  • 遍历key_path[:-1]:只处理前n-1个键,最后一个键用来直接赋值,避免多创建一层无用的字典。

运行这段代码后,item的结构就是你想要的{'a': {'b': {'c': 'somevalue'}}},用json.dump序列化也完全符合JSON规范,不会再触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:16:30