将嵌套的dictionary元素移到顶层,并使其余的嵌套元素值跟随| Python | Djang

2024-09-30 22:19:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典,取自一个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可能有一个函数来处理这样的东西,我就是找不到。我错过了什么


Tags: 代码textobj元素列表顺序content顶级