使用Python创建家谱

1 投票
2 回答
5899 浏览
提问于 2025-04-18 03:13

我最近开始学习Python,正在用Python构建一个家谱树。我的想法是这个树可以向两边生长,也就是说,既可以添加老一辈的人,也可以添加年轻一辈的人到同一棵树上。

我尝试过用二叉树和N叉树来实现,但效果都不好。有没有人能推荐一个更适合构建家谱树的数据结构,并指导我怎么实现它?

2 个回答

1

如果你看看“longlines”这个应用,还有GEDCOM文件格式(不是XML版本)和其他家谱软件,它们会为每个人和每个家庭单元创建一个独特的记录,然后用这些记录的ID来建立家庭成员和孩子之间的符号引用。

比如说,在这个GEDCOM记录中,它用ID为“I25”的个体来表示一个人,这个人是家庭ID为F11的孩子(FAMC),同时在家庭F6和F12中是配偶(FAMS)。

  0 @I25@ INDI
  1 NAME Thomas Trask /Wetmore/ Sr
  1 SEX M
  1 BIRT
    2 DATE 13 March 1866
    2 PLAC St. Mary's Bay, Digby, Nova Scotia
    2 SOUR Social Security application
  1 NATU
    2 NAME Thomas T. Wetmore
    2 DATE 26 October 1888
    2 PLAC Norwich, New London, Connecticut
    2 AGE 22 years
    2 COUR New London County Court of Common Pleas
    2 SOUR court record from National Archives
  1 OCCU Antiques Dealer
  1 DEAT
    2 NAME Thomas Trask Wetmore
    2 DATE 17 February 1947
    2 PLAC New London, New London, Connecticut
    2 AGE 80 years, 11 months, 4 days
    2 CAUS Heart Attack
    2 SOUR New London Death Records
  1 FAMC @F11@
  1 FAMS @F6@
  1 FAMS @F12@

人际关系比简单的树状数据结构能表示的要复杂得多。

0

经过大量搜索,我发现图这种数据结构更适合解决这个问题。因为一个家庭的关系是四面八方的,使用图结构是比较常见的做法。

  • 每个节点可以存储一个人的详细信息。
  • 节点可以包含指向父节点的链接,还有一些功能,比如查找两个节点之间的关系等等。
  • 在查找关系时,可以把父节点看作父母,把父节点的父节点看作祖父母,依此类推。
  • 可以遍历到父节点,看看是否有其他子节点,把它们标记为兄弟姐妹等等。

这个想法是这样的,我觉得它能帮助解决这个问题!

撰写回答