将嵌套的字典元素移到顶层,并使其余的嵌套元素值遵循| Python | Django的

时间:2019-02-08 06:40:50

标签: python json django list dictionary

我有一个字典,取自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可能具有处理类似我无法找到的东西的功能。我想念什么?

0 个答案:

没有答案