def recursive(p, d=0, label=None): name = "main" if d > 0: name = get_subgraph_name() comment = "depth %s" % (d) dot = Digraph(name=name, comment=comment) if not label == None: dot.attr(label=label) if type(p).__name__ == 'dict': for k in p: dot.label = k v = p[k] if 'children' in v: s = recursive(v['children'], (d + 1), k) dot.subgraph(s) elif type(p).__name__ == 'list': for x in p: if type(x).__name__ == 'str': n_key = get_key(x) dot.node(n_key, label=x) continue for k in x: #n_key = get_key(k) #dot.node(n_key, label=k) v = x[k] if 'children' in v: s = recursive(v['children'], (d + 1), k) dot.subgraph(s) return dot