Ooops... lets try again: .def trans(paths): . tree = {} . for path in paths: . branch = tree . for node in path[:-2]: . branch = branch.setdefault(node, {}) . branch[path[-2]] = path[-1] . return tree I don't know how that enumerate slipped in there. :) Jonathan.