Как мне пройти по всем уровням структуры данных, чтобы извлечь все данные, когда я не знаю, сколько будет уровней? - PullRequest
2 голосов
/ 02 ноября 2009

Мне нужно извлечь данные из структуры и поместить их в список, но я не знаю, сколько уровней имеет структура.

Для каждого уровня я могу вызвать level.children(), если нет уровней ниже текущего, он возвращает [], если есть, он возвращает [object, object, ...], на каждом из которых я могу позвонить children() снова.

Мне нужно углубляться в структуру, пока я не извлеку все уровни данных в список.

При использовании такой структуры:

<name>John Smith</name>
<team link="http://teamwebsite.com">
    <name>Team Name</name>
</team>
<games>
    <location>
        <venue>A stadium</venue>
    </location>
</games>

Список должен выглядеть примерно так:

[
    [
        {'name': 'name', 'attrs': {}, 'text': 'John Smith', 'parent': None},
    ],
    [
        {'name': 'team', 'attrs': {'link': 'http://teamwebsite.com'}, 'text': '', 'parent': None},
        {'name': 'name', 'attrs': {}, 'text': 'Team Name', 'parent': 1}, # the reference to its parent's position in the list
    ],
    [
        {'name': 'games', 'attrs': {}, 'text': '', 'parent': None},
        {'name': 'location', 'attrs': {}, 'text': '', 'parent': 1},
        {'name': 'venue', 'attrs': {}, 'text': 'A stadium', 'parent': 2},
    ],
]

Я пытаюсь выяснить Python, который я использовал бы, чтобы перейти от структуры данных к моему списку. Мне нужен своего рода самосохраняющийся цикл, но я не могу найти хорошее решение.

Есть что-нибудь, чтобы указать мне правильное направление? Я уверен, что есть какая-то хорошая теория для такого рода вещей, о которой я совершенно не знаю, но был бы рад прочитать.

Ответы [ 2 ]

10 голосов
/ 02 ноября 2009

Вы описываете рекурсию , но я предполагаю, что есть лучше , способов , до , разбора , XML .

5 голосов
/ 02 ноября 2009

Концепция, которую вы хотите использовать здесь, называется " Recursion ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...