Ответ Винэя должен все еще работать, но для Python 2.7+ и 3.2+ рекомендуется следующее:
parent_map = {c:p for p in tree.iter() for c in p}
getiterator()
устарела в пользу iter()
, и было бы хорошо использовать новый dict
конструктор понимания списка.
Во-вторых, при создании документа XML возможно, что у ребенка будет несколько родителей, хотя это удаляется после сериализации документа. Если это имеет значение, вы можете попробовать это:
parent_map = {}
for p in tree.iter():
for c in p:
if c in parent_map:
parent_map[c].append(p)
# Or raise, if you don't want to allow this.
else:
parent_map[c] = [p]
# Or parent_map[c] = p if you don't want to allow this