[英]How to create Family tree?
擁有家庭成員的字典如何創建它的樹?
字典的結構如下所示:
{'parent':'Smith', 'children':[
{'parent':'Connor', 'children':[
{'parent':'Alexis','children':[
{'parent':'Joe', 'children':[
{'parent':'Clark','children':[]}]}]},
{'parent':'Sue','children':[]}]},
{'parent':'Cooper', 'children':[
{'parent':'Max','children':[
{'parent':'Luis', 'children':[]},]},
{'parent':'Elvis', 'children':[]},
{'parent':'Steven', 'children':[]}]}]}
在創建族樹之后,我該如何檢查一些日期,例如:如何檢查有多少成員獲得整個家庭或單個家庭的樹。
檢查整個家族樹根或家庭的某些部分有多大。
如何將新成員添加到現有位置或家族樹內的新位置?
添加樹的例子:
Smith
Conor
Alexis
Joe
Clark
Sue
Cooper
Max
Luis
Elvis
Steven
與計算機系統目錄相同的樣式。
這只是檢查器G4dget的答案,幾乎在那里,但需要一些改動:
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)
根據上面的注釋,您需要在程序開頭import itertools
。
編輯:平鋪樹的功能應該用於你想要做的其他事情:
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
未經測試,但這應該做到
class Person:
ID = itertools.count()
def __init__(self):
self.id = next(self.__class__.ID)
self.parent = None
self.children = []
def createTree(familyTreeDict, parent=None):
if not familyTreeDict:
return []
else:
members = []
for name familyTreeDict:
members.append(Person(name))
members[-1].parent = parent
for child in familyTreeDict[name]:
members[-1].children.append(createTree(child, members[-1]))
return members
然后,如果要打印出樹結構,請給出createTree
的輸出:
def printout(family, indent=0):
for parent in family:
print '\t'*indent, parent.name
for child in parent.children:
printout(child, indent+1)
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.