python - 如果存在新的子节点,如何使用 python 在每次迭代中附加到 JSON 中的子节点?
问题描述
样本
template = {
"Table": [
{
"level": 2,
"value": {
"element Name": "",
"add Row": "False",
"cost Type": "",
"flag": "flag",
"cost": "",
"actions": "True"
},
"RHS": {},
"children": [
{
"level": 3,
"value": {
"element Name": "",
"add Row": "False",
"cost Type": "",
"cost": "",
"actions": "True"
},
"RHS": {},
"children": []
}
]
}
]
}
考虑到上面的字典,我想附加到最后一个“孩子”,每次循环运行时,它都应该附加到上一次迭代中创建的孩子。循环1:“children”:{“level”:4,“value”:{“element Name”:“”,“add Row”:“False”,“cost Type”:“”,“cost”:“” ,“动作”:“真”},“右轴”:{},“儿童”:[] }
循环 2:
迭代 2 "children":{ "level": 5, "value": {"element Name": "", "add Row": "False", "cost Type": "", "cost": "", “动作”:“真”},“右轴”:{},“孩子”:[] }
等等。
我的代码是:
循环的 Python 代码
for _ in range(sublevels):
number = number + 1
child = {"level": sublevels + 2,
"value": {"element Name": "", "add Row": False,
"cost Type": "", "cost": "",
"actions": True}, "RHS": {}, "children": []}
template['Table'][0]['children'].append(child)
输出:迭代后,JSON 应该如下所示
{
"Table": [
{
"level": 2,
"value": {
"element Name": "",
"add Row": "False",
"cost Type": "",
"flag": "flag",
"cost": "",
"actions": "True"
},
"RHS": {},
"children": [
{
"level": 3,
"value": {
"element Name": "",
"add Row": "False",
"cost Type": "",
"cost": "",
"actions": "True"
},
"RHS": {},
"children": [
[
{
"level": 4,
"value": {
"element Name": "",
"add Row": "False",
"cost Type": "",
"cost": "",
"actions": "True"
},
"RHS": {},
"children": [
[
{
"level": 5,
"value": {
"element Name": "",
"add Row": "False",
"cost Type": "",
"cost": "",
"actions": "True"
},
"RHS": {},
"children": []
}
]
]
}
]
]
}
]
}
]
}
Iteration 1: template['Table'][0]['children']
Iteration 2: template['Table'][0]['children'][0]['children']
Iteration 3: template['Table'][0]['children'][0]['children'][0]['children']
解决方案
import json
template = {"Table": []}
sublevels = 5
for _ in range(sublevels):
#number = number + 1
child = {"level": _ + 2,
"value": {"element Name": "", "add Row": False,
"cost Type": "", "cost": "",
"actions": True}, "RHS": {}, "children": []}
cur_path = "[0]['children']"*_
if _ == 0:
template['Table'].append(child)
else:
exec(f"template['Table']{cur_path}.append(child)")
print(json.dumps(template, indent = 2))
不是最漂亮的方式,您应该避免使用 exec,但我试图从 dict 调用 JSON 路径,但它不起作用,所以我使用了 exec。
这很好用并且可以嵌套它..
运行此代码得到的输出:
{
"Table": [
{
"level": 2,
"value": {
"element Name": "",
"add Row": false,
"cost Type": "",
"cost": "",
"actions": true
},
"RHS": {},
"children": [
{
"level": 3,
"value": {
"element Name": "",
"add Row": false,
"cost Type": "",
"cost": "",
"actions": true
},
"RHS": {},
"children": [
{
"level": 4,
"value": {
"element Name": "",
"add Row": false,
"cost Type": "",
"cost": "",
"actions": true
},
"RHS": {},
"children": [
{
"level": 5,
"value": {
"element Name": "",
"add Row": false,
"cost Type": "",
"cost": "",
"actions": true
},
"RHS": {},
"children": [
{
"level": 6,
"value": {
"element Name": "",
"add Row": false,
"cost Type": "",
"cost": "",
"actions": true
},
"RHS": {},
"children": []
}
]
}
]
}
]
}
]
}
]
}
推荐阅读
- python - 无效的文字 python 算命先生
- vue.js - 在 Vue.js 中 npm 运行服务器时发出 CopyPlugin 后 98%
- kotlin - 如何避免在任何地方重复相同的注释参数?
- algorithm - 如何实现飞镖二进制搜索算法?
- microsoft-graph-api - 在 Azure AD B2B 中批量创建用户
- javascript - 如何在 React 的 Toggle Switch 组件内添加文本?
- android - 如果项目中有多个模块,如何缩短 Android Studio 中的包?
- spring - 如何在一个端点使用不同的请求体?
- git - 如何在 Git 中获取 master 分支的默认值?
- javascript - 将动作添加到动态创建的选项选择