[Tutor] treeTraversal, nested return?

Matthew Wood woodm1979 at gmail.com
Fri Jun 4 20:08:56 CEST 2010


In general, there's 2 solutions to your "unflattening" problem.

A) The general solution: Keep track of the depth you're at, and add
tabs/spaces ('\t' * depth) as necessary.

B) The xml solution: Use (for example) the dom.minidom module, and create a
new "ul node" and populate it with children, at each level.  Then, have the
xml do the printing for you.

<nitpick>
For what it's worth, I may have a slight nit-pick of your final output.  I
don't believe you can technically have a <ul> child of a <ul> node.  I'm not
absolutely sure on that, but my quick google searching has appeared to
confirm.  If that turns out to be true, you'll need to change the structure
of your output.

<ul>
    <li>
        1,0,data
        <ul>
            <li>555,1,image</li>
            ...
        </ul>
    </li>
</ul>

All of that is, of course, null and void if you define your own xml scheme.


</nitpick>


--

I enjoy haiku
but sometimes they don't make sense;
refrigerator?


On Fri, Jun 4, 2010 at 11:15 AM, <jjcrump at uw.edu> wrote:

> All,
>
> any observations might be helpful. For the display of database contents I
> have the following problem:
>
> Database querys will return data to me in tuples of the following sort:
> each tuple has a unique id, a parent id, and a type.
>
> a parent id of 0 indicates that the element has no parent.
> not all data elements have children
> image elements have no children and must have a parent
>
> So the contents of the db is a tree of sorts:
>
> (1, 0, work)
> (555, 1, image)
> (556, 1, work)
> (557, 556, image)
> (558, 556, work)
> (559, 558, image)
> (560, 558, work)
> (561, 556, image)
> (562, 556, image)
> (563, 1, work)
> (564, 563, work)
> (565, 1, work)
>
> I have a function that will traverse this tree, summoning lists of tuples
> at each leaf. Well and good; it took a lot of trial and error, but it was a
> fine education in tree traversal.
>
> def makeHeirarchy(id):
>    id = parentPath(id)[-1]
>    rootimages = getImages(id[0])
>    rootworks = getWorks(id[0])
>    heirarchy = treeTraversal(rootworks, [id, rootimages])
>    return heirarchy
>
> ## which calls this recursive function:
>
> def treeTraversal(listIn,result):
>    for x in listIn:
>        if not getWorks(x[0]):
>            result.append(x)
>            result.append(getImages(x[0]))
>        else:
>            result.append(x)
>            result.append(getImages(x[0]))
>            treeTraversal(getWorks(x[0]), result)
>    return result
>
> My problem is that this returns the tuples to me in a flat list.
> I've been trying to work out how I can get it to return some sort of nested
> structure: nested lists, dictionaries, or html thus:
>
> <ul>
> <li>1,0,data</li>
>    <ul>
>    <li>555, 1, image</li>
>    <li>556, 1, data<li>
>        <ul>
>        <li>557, 556, image</li>
>        <li>561, 556, image</li>
>        <li>562, 556, image</li>
>        <li>558, 556, data</li>
>            <ul>
>            <li>559, 558, image</li>
>            <li>560, 558, image</li>
>            </ul>
>        </ul>
>    <li>563, 1, data</li>
>        <ul>
>            <li>564, 563, data</li>
>        </ul>
>    <li>565, 1, data</li>
>    </ul>
> </ul>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100604/828310e2/attachment.html>


More information about the Tutor mailing list