Hallo people, I have the following code that implements a simple recursive tree like structure.
The trouble is with the GetTreeBranch function, the print statement prints a valid value but the return immediatley afterward doesn't return anything. Can anyone help me with why? Thanks, Matt. Code and output follow; ''' dirtree A simple implementation of a filesystem-like tree datastructure. ''' def MakeNewTree(rootname='root'): '''MakeNewTree Creates an empty tree with a 'root' node. If the parameter rootname is not given, it defaults to 'root'. ''' return [{rootname:[]}] def DoThingsToTree(path,value,tree,delete=False): '''_DoThingsToTree You should not use this function. ''' if type(path)==type(''): path=path.lstrip('/').rstrip('/').split('/') for item in tree: if type(item)==type({}) and item.has_key(path[0]): if len(path)==1: if not delete: try: item[path[0]].append(value) except KeyError: item[path[0]]=value else: if value is not None: del(item[path[0]][value]) else: del(tree[tree.index(item)]) break else: _DoThingsToTree(path[1:],value,item[path[0]],delete) def GetTreeBranch(path,tree): if type(path)==type(''): path=path.lstrip('/').rstrip('/').split('/') for item in tree: if type(item)==type({}) and item.has_key(path[0]): if len(path)==1: print 'returning',tree[tree.index(item)] return tree[tree.index(item)] else: GetTreeBranch(path[1:],item[path[0]]) def AddItemToTree(path,value,tree): '''AddITemToTree Add an item onto a 'branch' of the tree. path should be a '/' separated string that defines a path to the branch required. value an object to put onto the branch tree the tree to operate on. ''' DoThingsToTree(path,value,tree) def AddBranchToTree(path,branch,tree): '''AddBranchToTree Add a new branch to the tree. path should be a '/' separated string that defines a path to the branch required. branch an object used as the branch identifier (usually a string) tree the tree to operate on ''' DoThingsToTree(path,{branch:[]},tree) def DelItemFromTree(path,index,tree): '''DelItemFromTree Remove an item from the tree. path should be a '/' separated string that defines a path to the branch required. index the numeric index of the item to delete on the branch to delete. items are indexed in the order they are added, from 0 ''' DoThingsToTree(path,index,tree,delete=True) def DelBranchFromTree(path,tree): '''DelBranchFromTree Remove a branch and all items and subbranches. path should be a '/' separated string that defines a path to the branch required. tree The tree to delete the branch from. ''' DoThingsToTree(path,None,tree,delete=True) OUTPUT; >>> from dirtree import * >>> MyTree=MakeNewTree('Matt') >>> AddBranchToTree('Matt','Good',MyTree) >>> AddBranchToTree('Matt','Bad',MyTree) >>> AddItemToTree('Matt/Good','Computers',MyTree) >>> AddItemToTree('Matt/Bad','Drinking',MyTree) >>> a=GetTreeBranch('Matt/Bad',MyTree) returning {'Bad': ['Drinking']} >>> a >>> This email is confidential and may be privileged. If you are not the intended recipient please notify the sender immediately and delete the email from your computer. You should not copy the email, use it for any purpose or disclose its contents to any other person. Please note that any views or opinions presented in this email may be personal to the author and do not necessarily represent the views or opinions of Digica. It is the responsibility of the recipient to check this email for the presence of viruses. Digica accepts no liability for any damage caused by any virus transmitted by this email. UK: Phoenix House, Colliers Way, Nottingham, NG8 6AT UK Reception Tel: + 44 (0) 115 977 1177 Support Centre: 0845 607 7070 Fax: + 44 (0) 115 977 7000 http://www.digica.com SOUTH AFRICA: Building 3, Parc du Cap, Mispel Road, Bellville, 7535, South Africa Tel: + 27 (0) 21 957 4900 Fax: + 27 (0) 21 948 3135 http://www.digica.com -- http://mail.python.org/mailman/listinfo/python-list