我有一个字典,取自JSON文件,其中所有值(包括嵌套值)都是顺序的。不论嵌套。
Obj = [{
"Text": 1,
"Content": [{"Text": 2},{"Text": 3},{"Text": 4},{"Text": 5}]},
{
"Text": 6,
"Content": [{"Text": 7},{"Text": 8},{"Text": 9},{"Text": 10}]}
]
我需要将{"Text": 3}
设为顶级元素,并将以下所有元素移动到其下方的嵌套列表中,如下所示:
Obj = [{
"Text": 1,
"Content": [{"Text": 2}]},
{
"Text": 3,
"Content": [{"Text": 4},{"Text": 5}]},
{
"Text": 6,
"Content": [{"Text": 7},{"Text": 8},{"Text": 9},{"Text": 10}]}
]
假设此列表确实很长,具有不同数量的顶级和嵌套元素我将如何高效地做到这一点?
这是我的实际代码的非常简化的版本,结果大致相同,即我得到的是空的“ Content”值,或者随着该代码的其他(更长)变体,元素的顺序全部消失了同步:
Obj = [{
"Text": 1,
"Content": [{"Text": 2},{"Text": 3},{"Text": 4},{"Text": 5}]},
{
"Text": 6,
"Content": [{"Text": 7},{"Text": 8},{"Text": 9},{"Text": 10}]}
]
print(Obj)
NewObj = []
lineCounter = -1
topLevelKey = -1
ElementToMove = 3
for toplevel in Obj:
topLevelKey += 1
NewObj.append(toplevel)
NewObj[len(NewObj)-1]['Content'] = []
for nested in toplevel['Content']:
lineCounter += 1
print(NewObj)
if nested['text'] == ElementToMove:
NewObj.insert(topLevelKey,nested)
NewObj[topLevelKey]['Content'] = []
else:
NewObj[topLevelKey]['Content'].append(nested)
print(NewObj)
此代码示例的最终结果看起来像这样:
[{'Text': 1, 'Content': []}, {'Text': 6, 'Content': []}]
我尝试了几种不同的解决方法,我知道答案可能非常简单,Python可能具有处理类似我无法找到的东西的功能。我想念什么?