import json
def attach_branch(tree, branch):
l = len(branch)
node = branch[0]
# If node doesn't exist get an empty subtree
subtree = tree.get(node, {})
if l == 1:
# Create leaf node
tree.update({node: subtree})
return tree
subtree.update(attach_branch(subtree, branch[1:]))
tree.update({node: subtree})
return tree
if __name__ == '__main__':
root_list = []
tree = {}
prefixes = [
'F',
'A|B|C',
'A|B|D',
'B|C|D',
'B|C|E',
'A',
]
for branch in map(lambda x: x.split('|'), prefixes):
if len(branch) == 1:
root_list.append(branch[0])
continue
tree = attach_branch(tree, branch)
root_list.append(tree)
print(json.dumps(root_list, indent=2))
aW1wb3J0IGpzb24KCgpkZWYgYXR0YWNoX2JyYW5jaCh0cmVlLCBicmFuY2gpOgogICAgbCA9IGxlbihicmFuY2gpCiAgICBub2RlID0gYnJhbmNoWzBdCiAgICAjIElmIG5vZGUgZG9lc24ndCBleGlzdCBnZXQgYW4gZW1wdHkgc3VidHJlZQogICAgc3VidHJlZSA9IHRyZWUuZ2V0KG5vZGUsIHt9KQoKICAgIGlmIGwgPT0gMToKICAgICAgICAjIENyZWF0ZSBsZWFmIG5vZGUKICAgICAgICB0cmVlLnVwZGF0ZSh7bm9kZTogc3VidHJlZX0pCiAgICAgICAgcmV0dXJuIHRyZWUKCiAgICBzdWJ0cmVlLnVwZGF0ZShhdHRhY2hfYnJhbmNoKHN1YnRyZWUsIGJyYW5jaFsxOl0pKQoKICAgIHRyZWUudXBkYXRlKHtub2RlOiBzdWJ0cmVlfSkKICAgIHJldHVybiB0cmVlCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHJvb3RfbGlzdCA9IFtdCiAgICB0cmVlID0ge30KCiAgICBwcmVmaXhlcyA9IFsKICAgICAgICAnRicsCiAgICAgICAgJ0F8QnxDJywKICAgICAgICAnQXxCfEQnLAogICAgICAgICdCfEN8RCcsCiAgICAgICAgJ0J8Q3xFJywKICAgICAgICAnQScsCiAgICBdCgogICAgZm9yIGJyYW5jaCBpbiBtYXAobGFtYmRhIHg6IHguc3BsaXQoJ3wnKSwgcHJlZml4ZXMpOgogICAgICAgIGlmIGxlbihicmFuY2gpID09IDE6CiAgICAgICAgICAgIHJvb3RfbGlzdC5hcHBlbmQoYnJhbmNoWzBdKQogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICB0cmVlID0gYXR0YWNoX2JyYW5jaCh0cmVlLCBicmFuY2gpCgogICAgcm9vdF9saXN0LmFwcGVuZCh0cmVlKQogICAgcHJpbnQoanNvbi5kdW1wcyhyb290X2xpc3QsIGluZGVudD0yKSk=