def build(ret, upv):
    if not t:
        return None, None
k, v = t.pop(0)
while k and v:
    if upv and v[:len(upv)] != upv:
        return k, v
r = {}
ret[k] = r
k, v = build(r, v)
return None, None
Создать иерархию из словаря списков