I am looking for the simplest generic way to convert this python list:
x = [
{\"foo\":\"A\", \"bar\":\"R\", \"baz\":\"X\"},
This is a simple loop over the data, no recursion. An auxiliary tree where the values are dictionary keys is used as an index to the result tree while it is being built.
def make_tree(diclist, keylist):
indexroot = {}
root = {}
for d in diclist:
walk = indexroot
parent = root
for k in keylist:
walk = walk.setdefault(d[k], {})
node = walk.setdefault('node', {})
if not node:
node[k] = d[k]
parent.setdefault(k+'s',[]).append(node)
walk = walk.setdefault('children', {})
parent = node
return root[keylist[0]+'s']
foos = make_tree(x, ["foo","bar","baz"])