
本文详解如何正确构建单个字典对象,使其 data 键对应一个包含多个子字典的列表,避免因循环内重复初始化导致结构错误。核心在于将字典容器声明移出循环,并使用 json.dumps() 实现美观输出。
本文详解如何正确构建单个字典对象,使其 data 键对应一个包含多个子字典的列表,避免因循环内重复初始化导致结构错误。核心在于将字典容器声明移出循环,并使用 json.dumps() 实现美观输出。
在 Python 中,若希望最终得到形如 [{"data": [{"Record": 1}, {"Record": 2}, {"Record": 3}]}] 的嵌套结构,关键在于区分“容器创建”与“内容填充”两个阶段:row 字典代表整个数据单元,应仅初始化一次;而 row['data'] 列表则负责逐项追加记录。
错误写法(如原始代码)将 row = {'data': []} 放在 for 循环内部,导致每次迭代都新建一个空字典并追加到 data 列表中——最终生成的是三个独立字典组成的列表,而非一个字典内含三个记录:
# ❌ 错误:每次循环都新建 row → 产生多个 dict
data = []
data2 = [1, 2, 3]
for x in data2:
row = {'data': []} # ← 每次都重置!
row['data'].append({'record': x})
data.append(row) # → data = [{'data': [1]}, {'data': [2]}, {'data': [3]}]
✅ 正确做法是将 row 初始化移至循环外部,确保只创建一个顶层字典,再在循环中持续向其 'data' 列表追加元素:
data = []
data2 = [1, 2, 3]
# ✅ 容器只创建一次
row = {
'data': []
}
# ✅ 循环中仅填充内容
for x in data2:
row['data'].append({'Record': x}) # 注意:键名按需求改为大写 'Record'
# ✅ 最终整体追加到 data 列表
data.append(row)
# 使用 json.dumps 格式化输出,提升可读性
import json
print(json.dumps(data, indent=4))
运行结果如下(符合预期):
[
{
"data": [
{
"Record": 1
},
{
"Record": 2
},
{
"Record": 3
}
]
}
]
⚠️ 注意事项:
- 字典键名大小写敏感,原始问题中目标输出为 "Record"(首字母大写),而示例代码中为 'record'(小写),需统一修正;
- 若后续需多次复用该结构,建议封装为函数,增强可维护性;
- json.dumps(..., indent=4) 仅用于调试或展示,生产环境若无需格式化,可直接使用 print(data)。
总结:结构设计决定逻辑位置——外层容器定义在外,内层数据填充在内,这是构建嵌套数据结构的基本原则。










