嵌套字典/列表的倒置层次结构

问题描述 投票:0回答:1

考虑以下字典:

{
  "a": {
    "b1": {
      "c": {
        "value": "c_value",
        "children": {
          "d": "d_value"
        }
      }
    },
    "b2": [
      "b2_1",
      {
        "b2_2_1": 2,
        "b2_2_2": {
          "b2_2_2_1": "b2_2_2_1_value",
          "b2_2_2_2": "b2_2_2_2_value"
        }
      },
      3
    ]
  }
}

如何反转比如结果是这样的:

{
  "d": {
    "children": {
      "c": {
        "b2": [
          3,
          {
            "b2_2_2": {
              "b2_2_2_2": "b2_2_2_2_value",
              "b2_2_2_1": "b2_2_2_1_value"
            },
            "b2_2_1": 2
          },
          "b2_1"
        ],
        "b1": {
          "a": "d_value"
        }
      }
    },
    "value": "c_value"
  }
}

我正在努力解决这个问题的递归方法,而不需要创建一个全局变量来处理结果。

python python-3.x
1个回答
0
投票

您要求对原始词典进行非常具体的转换。这意味着您需要针对这种情况定义自定义转换。以下是您应该如何执行此操作,但请注意,您想要进行的任何新更改都需要采用新的方法。这个解决方案教你应该如何推理:

import json

def custom_transform(d):
    transformed = {
        "d": {
            "children": {
                "c": {
                    "b2": [
                        d["a"]["b2"][2],  
                        {
                            "b2_2_2": {
                                "b2_2_2_2": d["a"]["b2"][1]["b2_2_2"]["b2_2_2_2"],
                                "b2_2_2_1": d["a"]["b2"][1]["b2_2_2"]["b2_2_2_1"]
                            },
                            "b2_2_1": d["a"]["b2"][1]["b2_2_1"]
                        },
                        d["a"]["b2"][0]  
                    ],
                    "b1": {
                        "a": d["a"]["b1"]["c"]["children"]["d"]
                    }
                }
            },
            "value": d["a"]["b1"]["c"]["value"]
        }
    }
    return transformed

original_dict = {
    "a": {
        "b1": {
            "c": {
                "value": "c_value",
                "children": {
                    "d": "d_value"
                }
            }
        },
        "b2": [
            "b2_1",
            {
                "b2_2_1": 2,
                "b2_2_2": {
                    "b2_2_2_1": "b2_2_2_1_value",
                    "b2_2_2_2": "b2_2_2_2_value"
                }
            },
            3
        ]
    }
}

transformed_dict = custom_transform(original_dict)
print(json.dumps(transformed_dict, indent=4))

这将为您提供预期的输出:

{
    "d": {
        "children": {
            "c": {
                "b2": [
                    3,
                    {
                        "b2_2_2": {
                            "b2_2_2_2": "b2_2_2_2_value",
                            "b2_2_2_1": "b2_2_2_1_value"
                        },
                        "b2_2_1": 2
                    },
                    "b2_1"
                ],
                "b1": {
                    "a": "d_value"
                }
            }
        },
        "value": "c_value"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.