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

如何解析Python嵌套dict对象提取字段并将数据写入数据库

核心问题定位
  • 直接遍历Python字典默认返回键而非值:你写for group in dictForm时,拿到的group是'0'、'1'、'2'这类字符串键,不是分组对应的实际字典对象,所以后续group[str(iteration)]的写法完全错误。
  • 遍历Inputs时同样只拿到键:你写for input in group[str(iteration)]['Inputs']时,拿到的input是Inputs下的字符串键(比如示例里的'0'),不是包含DataName、DataType的子字典,直接取值必然报错。
正确解析逻辑

你的目标字典是两层嵌套结构,取值逻辑如下:

  1. 按数字顺序遍历外层字典的所有键,拿到每个分组对应的字典,从中取出Group Name字段
  2. 对每个分组,遍历其Inputs下的所有键,拿到每个输入项对应的字典,从中取出DataName和DataType字段
修正后的入库代码

假设icformkey的顺序是「所有level=0的分组在前,所有level=1的输入项在后」,和遍历顺序逐个对应,代码如下:

iteration = 0
# 先将外层字典的键转为整数排序,保证遍历顺序和键的数字顺序一致
for group_key in sorted(dictForm.keys(), key=lambda x: int(x)):
    group_data = dictForm[group_key]
    # 处理分组(level=0)
    if icformkey[iteration].level == 0:
        SingleQuery = icformkey[iteration]
        SingleQuery.name = group_data['Group Name']
        SingleQuery.full_clean()
        SingleQuery.save()
        iteration += 1
    # 处理该分组下的所有输入项(level=1)
    for input_key in sorted(group_data['Inputs'].keys(), key=lambda x: int(x)):
        input_data = group_data['Inputs'][input_key]
        if icformkey[iteration].level == 1:
            SingleQuery = icformkey[iteration]
            SingleQuery.name = input_data['DataName']
            SingleQuery.datatype = input_data['DataType']
            SingleQuery.full_clean()
            SingleQuery.save()
            iteration += 1

output = {'result': True, 'error': 0}
return JsonResponse(output, safe=False)
补充说明

如果icformkey的存储顺序和遍历顺序不匹配,可以先把解析出来的所有数据存到一个列表里,再批量更新queryset,避免索引错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:09:03