如何创建家谱? [英] How to create Family tree?

查看:49
本文介绍了如何创建家谱?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

家庭成员有字典,我如何创建它的树?

Having dictionary with family members how can I create a tree of it?

字典的结构如下所示:

{'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':[]}]}]}

创建家谱后,我如何检查一些日期,例如:如何查看有多少成员获得了整个家族或单一家族的树.

After creating family tree, how can I check some dates such as: how to check how many members got entire family or single family of tree.

检查整个家谱根或家庭的某个部分有多大.

check how big is entire family tree root or some part of family.

如何将新成员添加到现有位置或家谱中的新位置?

how can I add new members to existing position or to new position inside family tree?

添加树的例子:

Smith
    Conor
        Alexis
            Joe
                Clark
        Sue
    Cooper
        Max
            Luis
        Elvis
        Steven

与计算机系统目录样式相同.

Same style as computer system directory.

推荐答案

这只是 inspectorG4dget 的答案,几乎已经存在,但需要一些改动:

This is just inspectorG4dget's answer which was almost there but needs some alterations:

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.

As per the comment above, you need to import itertools at the beginning of the programme.

压平树的函数应该用于您想做的所有其他事情:

A function to flatten the tree should serve for everything else you want to do:

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

这篇关于如何创建家谱?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆