python: convierte un bucle for en una función de recursión

En primer lugar, todavía soy nuevo en Python, así que, por favor, tómatelo con calma.

He investigado y tengo una comprensión básica de cómo escribir una función recursiva, pero estoy totalmente confundido con la tarea que tengo por delante.

Realmente me gustaría recibir algunos consejos y sugerencias para poder hacer esto por mí mismo y entenderlo.

Aquí está la tarea:

Iterar a través de un diccionariocompruebe si hay una clave 'niños'si es verdad, haz algorepetir

Aquí está el problema,

La tecla 'opción' está anidada en otra tecla llamada 'hijos'. Allí, por lo que me gustaría recorrer cada tecla 'niños' hasta que no existan más.

Así es como se ve el código sin recursión. Por supuesto que falla porque es demasiado explícito, demasiado rígido.

#level(one/two/three) refer to the level of nesting, easier for me to know where I am     in the loop.
#qdf_v2 is a particular type of file which is essentially a dictionary 

for levelone in qdf_v2['children']:
    if 'children' in levelone:
        store = options
        for leveltwo in levelone['children']:
            if 'children' in leveltwo:
                store = options
                for levelthree in leveltwo['children']:
                    if 'children' in levellevel:
                        repeat....

Me gustaría recorrer el diccionario y es la clave 'niños' hasta que ya no existan.

Aquí hay algunos JSON que puedes copiar y pasar esto enhttp://www.jsoneditoronline.org/ para ver con que estoy trabajando.

{
    "base": "http://panoptic-fearless.ldc.yougov.net/questionnaires/Test_maj_demo_newG4_2/versions/12/",
    "children": [
        {
            "name": "one",
            "children": [
                {
                    "name": "measures",
                    "children": [
                        {
                            "type": "single",
                            "options": {
                                "sort_order": "asending",
                                "chart_layout": "5",
                                "chart_type": "bar",
                                "chart_color": "green"
                            },
                            "text": "How much would you say you like or dislike P.E. at school? ",
                            "name": "KYS_Q1",
                            "responses": {
                                "items": [
                                    {
                                        "code": 1,
                                        "text": "I love it",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 2,
                                        "text": "I like it",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 3,
                                        "text": "I don’t like it",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 4,
                                        "text": "I hate it",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 5,
                                        "text": "Don’t know",
                                        "element": "qdf:response"
                                    }
                                ],
                                "element": "qdf:response_group"
                            },
                            "element": "qdf:question",
                            "export": [
                                {
                                    "name": "KYS_Q1"
                                }
                            ]
                        },
                        {
                            "children": [
                                {
                                    "type": "single",
                                    "options": {
                                        "sort_order": "asending",
                                        "chart_layout": "4",
                                        "chart_type": "pie",
                                        "chart_color": "pink"
                                    },
                                    "text": "{multiple order=\"randomize\" max=3} You said that you $event P.E. at school...<br/> Which THREE of the following are your MAIN reasons for not liking P.E. at school? (Please tick up to three options)",
                                    "name": "KYS_Q2",
                                    "responses": {
                                        "items": [
                                            {
                                                "code": 1,
                                                "text": "I don't like going outside in bad weather (e.g. in the cold, rain etc.)",
                                                "element": "qdf:response"
                                            },
                                            {
                                                "code": 2,
                                                "text": "I’m always picked last to join a team",
                                                "element": "qdf:response"
                                            },
                                            {
                                                "code": 3,
                                                "text": "I don't like my P.E. teacher/ don’t think they are very good",
                                                "element": "qdf:response"
                                            },
                                            {
                                                "code": 4,
                                                "text": "I’m not very good at it",
                                                "element": "qdf:response"
                                            },
                                            {
                                                "code": 5,
                                                "text": "I find the games/ sports we play boring",
                                                "element": "qdf:response"
                                            }
                                        ],
                                        "element": "qdf:response_group"
                                    },
                                    "element": "qdf:question",
                                    "export": [
                                        {
                                            "name": "KYS_Q2"
                                        }
                                    ]
                                },
                                {
                                    "type": "single",
                                    "options": {
                                        "sort_order": "asending",
                                        "chart_layout": "5",
                                        "chart_type": "line",
                                        "chart_color": "green"
                                    },
                                    "text": "{multiple order=\"randomize\"} Below are some feelings that people can have about doing P.E. at school...<br/> Which of the following words describe how you feel about doing P.E. at school? (Please tick all that apply) ",
                                    "name": "KYS_Q3A",
                                    "responses": {
                                        "items": [
                                            {
                                                "code": 1,
                                                "text": "Stressed",
                                                "element": "qdf:response"
                                            },
                                            {
                                                "code": 2,
                                                "text": "Scared",
                                                "element": "qdf:response"
                                            },
                                            {
                                                "code": 3,
                                                "text": "Worried",
                                                "element": "qdf:response"
                                            },
                                            {
                                                "code": 4,
                                                "text": "Sick",
                                                "element": "qdf:response"
                                            },
                                            {
                                                "code": 5,
                                                "text": "Tiring ",
                                                "element": "qdf:response"
                                            }
                                        ],
                                        "element": "qdf:response_group"
                                    },
                                    "element": "qdf:question",
                                    "export": [
                                        {
                                            "name": "KYS_Q3A"
                                        }
                                    ]
                                }
                            ],
                            "element": "qdf:section"
                        },
                        {
                            "type": "single",
                            "options": {
                                "sort_order": "desending",
                                "chart_layout": "5",
                                "chart_type": "bar",
                                "chart_color": "green"
                            },
                            "text": "{single order=\"randomize\"} You said that you $event P.E...<br/> Which ONE of the following is the main reason you like it? ",
                            "name": "KYS_Q4",
                            "responses": {
                                "items": [
                                    {
                                        "code": 1,
                                        "text": "I like getting outside/ not being in the classroom",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 2,
                                        "text": "I like my P.E. teacher",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 3,
                                        "text": "I’m good at it",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 4,
                                        "text": "I find the games/ sports fun",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 5,
                                        "text": "I find the games/ sports easy",
                                        "element": "qdf:response"
                                    }
                                ],
                                "element": "qdf:response_group"
                            },
                            "element": "qdf:question",
                            "export": [
                                {
                                    "name": "KYS_Q4"
                                }
                            ]
                        }
                    ],
                    "element": "qdf:page"
                }
            ],
            "element": "qdf:module"
        },
        {
            "name": "two",
            "children": [
                {
                    "name": "test",
                    "children": [
                        {
                            "type": "single",
                            "options": {
                                "sort_order": "asending",
                                "chart_layout": "5",
                                "chart_type": "bar",
                                "chart_color": "green"
                            },
                            "text": "{multiple order=\"randomize\"}Below are some feelings that people can have about doing P.E at school...<br/> Which of the following words describe how you feel about doing P.E. at school? (Please tick all that apply)   ",
                            "name": "KYS_Q5A",
                            "responses": {
                                "items": [
                                    {
                                        "code": 1,
                                        "text": "Energised/ Awake",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 2,
                                        "text": "Excited",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 3,
                                        "text": "Relaxed",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 4,
                                        "text": "Confident",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 5,
                                        "text": "Happy",
                                        "element": "qdf:response"
                                    }
                                ],
                                "element": "qdf:response_group"
                            },
                            "element": "qdf:question",
                            "export": [
                                {
                                    "name": "KYS_Q5A"
                                }
                            ]
                        },
                        {
                            "type": "single",
                            "options": {
                                "sort_order": "asending",
                                "chart_layout": "25",
                                "chart_type": "column",
                                "chart_color": "orange"
                            },
                            "text": "{multiple order=\"randomize\"} For the following question please do not be afraid to be as honest as possible, no one else will be told your personal answers. <br/> Which of the following have you EVER done in order to avoid taking part in P.E. at school? (Please tick all that apply) ",
                            "name": "KYS_Q6",
                            "responses": {
                                "items": [
                                    {
                                        "code": 1,
                                        "text": "Lied about forgetting my kit",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 2,
                                        "text": "Lied about an injury",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 3,
                                        "text": "Lied about feeling unwell",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 4,
                                        "text": "Faked a note from my parents/ guardian",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 5,
                                        "text": "Faked a note from my doctor/ health professional",
                                        "element": "qdf:response"
                                    }
                                ],
                                "element": "qdf:response_group"
                            },
                            "element": "qdf:question",
                            "export": [
                                {
                                    "name": "KYS_Q6"
                                }
                            ]
                        },
                        {
                            "type": "single",
                            "options": {
                                "sort_order": "asending",
                                "chart_layout": "5",
                                "chart_type": "bar",
                                "chart_color": "green"
                            },
                            "text": "{multiple order=\"randomize\"} For the following question, please think about the teacher who has taught you P.E. MOST recently and if you have more than one teacher teaching you P.E. please think about the one who has taught you most often. <br/>  Which of the following statements do you agree with? (Please tick all that apply)",
                            "name": "KYS_Q7",
                            "responses": {
                                "items": [
                                    {
                                        "code": 1,
                                        "text": "My P.E. teacher inspires me to do more exercise",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 2,
                                        "text": "My P.E. teacher motivates me to take part in P.E. lessons",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 3,
                                        "text": "My P.E. teacher scares me",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 4,
                                        "text": "My P.E. teacher makes P.E. boring",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 5,
                                        "text": "My P.E. teacher makes P.E. fun",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 6,
                                        "text": "My P.E. teacher makes P.E. difficult/ hard",
                                        "element": "qdf:response"
                                    }
                                ],
                                "element": "qdf:response_group"
                            },
                            "element": "qdf:question",
                            "export": [
                                {
                                    "name": "KYS_Q7"
                                }
                            ]
                        },
                        {
                            "type": "single",
                            "options": {
                                "sort_order": "asending",
                                "chart_layout": "5",
                                "chart_type": "bar",
                                "chart_color": "green"
                            },
                            "text": "{multiple order=\"randomize\"} What would make you like P.E. more? (Please tick all that apply)",
                            "name": "KYS_Q8",
                            "responses": {
                                "items": [
                                    {
                                        "code": 1,
                                        "text": "If the P.E. teacher was nicer to me",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 2,
                                        "text": "If more lessons took place indoors (e.g. in the sports hall or a gym)",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 3,
                                        "text": "If more lessons took place outdoors",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 4,
                                        "text": "If we did more interesting sports/ activities",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 5,
                                        "text": "If we had more choice of the types of sport we had to do",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "code": 6,
                                        "text": "If we could wear what we wanted for the lesson",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "options": {
                                            "fixed": true
                                        },
                                        "children": [
                                            {
                                                "export": [
                                                    {
                                                        "name": "KYS_Q8other"
                                                    }
                                                ],
                                                "name": "KYS_Q8other",
                                                "type": "open",
                                                "element": "qdf:question"
                                            }
                                        ],
                                        "code": 7,
                                        "text": "Other ",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "options": {
                                            "xor": true,
                                            "fixed": true
                                        },
                                        "code": 8,
                                        "text": "Don’t know",
                                        "element": "qdf:response"
                                    },
                                    {
                                        "options": {
                                            "xor": true,
                                            "fixed": true
                                        },
                                        "code": 9,
                                        "text": "Not applicable – nothing would make me like P.E. more than I already do",
                                        "element": "qdf:response"
                                    }
                                ],
                                "element": "qdf:response_group"
                            },
                            "element": "qdf:question",
                            "export": [
                                {
                                    "name": "KYS_Q8"
                                }
                            ]
                        }
                    ],
                    "element": "qdf:page"
                }
            ],
            "element": "qdf:module"
        },
        {
            "children": [
                {
                    "children": [
                        {
                            "text": "​\n",
                            "element": "qdf:text"
                        }
                    ],
                    "element": "qdf:page"
                }
            ],
            "element": "qdf:module"
        }
    ],
    "panelid": 13,
    "created": "#2014-01-10T15:57:18.594000+00:00#",
    "typespec": {
        "src": "/questionnaires/typespecs/initial.qdf",
        "element": "qdf:typespec"
    },
    "qdf-ext:ext": [
        "meaningful-page-names"
    ],
    "element": "qdf:questionnaire",
    "builtin": {
        "src": "/questionnaires/builtins/initial.qdf",
        "element": "qdf:typedef"
    },
    "committer": "majeed.sahebzadha",
    "name": "Test_maj_demo_newG4_2",
    "commit message": "added a new module within a module"
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta