<p>这只是inspectorG4dget的答案,几乎就在那里,但需要一些修改:</p>
<pre><code>class Person:
ID = itertools.count()
def __init__(self, name, parent=None, level=0):
self.id = self.__class__.ID.next() # next(self.__class__.ID) in python 2.6+
self.parent = parent
self.name = name
self.level = level
self.children = []
def createTree(d, parent=None, level=0):
if d:
member = Person(d['parent'], parent, level)
level = level + 1
member.children = [createTree(child, member, level) for child in d['children']]
return member
t = createTree(my_tree) # my_tree is the name of your dictionary
def printout(parent, indent=0):
print '\t'*indent, parent.name
for child in parent.children:
printout(child, indent+1)
printout(t)
</code></pre>
<p>根据上面的注释,您需要在程序开始时<code>import itertools</code>。</p>
<p>编辑:展平树的函数应用于您要执行的所有其他操作:</p>
<pre><code>def flatten(parent):
L = [parent]
for child in parent.children:
L += flatten(child)
return L
flattened_tree = flatten(t)
print "All members: ", [person.name for person in flattened_tree]
print "Number of members:", len(flattened_tree)
print "Number of levels:", max([person.level for person in flattened_tree]) + 1
cooper = flattened_tree[6]
cooper_fl = flatten(cooper)
print "Members below Cooper: ", [person.name for person in cooper_fl]
print "Number:", len(cooper_fl)
levels = [person.level for person in cooper_fl]
print "Number of levels:", max(levels) - min(levels) + 1
</code></pre>