簡體   English   中英

如何使用存儲在列表中的字符串使用python軟件包ete2創建樹?

[英]How can I create a tree using the python package ete2 using strings stored in a list?

我正在嘗試使用python軟件包ete2從我的細胞自動機模型輸出的合成數據中制作出系統樹。 數據由列為(父,子)的對組成,其中對的每個成員都是代表突變事件的唯一整數。 我已經將字符串對中的每個成員重鑄為字符串,並在它們之前加上“ r”,所以現在:

(“ r1”,“ r2”)將代表一個稱為“ r1”的父代,從而產生一個名為“ r2”的子代。 因此輸出文件如下所示:

[['r1' 'r2']
 ['r1' 'r3']
 ['r1' 'r4']
 ['r1' 'r5']
 ['r1' 'r6']
 ['r1' 'r7']
 ['r1' 'r8']
 ['r1' 'r9']
 ['r2' 'r10']
 ['r1' 'r11']
 ['r1' 'r12']
 ['r8' 'r13']
 ['r1' 'r14']
 ['r4' 'r15']
 ['r1' 'r16']
 ['r1' 'r17']
 ['r1' 'r18']
 ['r1' 'r19']]

我想遍歷列表以使用'add_child'來制作樹,但始終會出錯。 我當前的代碼是:

t = Tree() # Creates an empty tree
r1 = t.add_child(name="r1")

for row in range(0, len(pairs_list)):
    a = str(pairs_list[row,1])
    b = str(pairs_list[row,0])
    a = b.add_child(name = a)

我得到錯誤:

Traceback (most recent call last):
  File "treetest.py", line 33, in <module>
    a = b.add_child(name = a)
AttributeError: 'str' object has no attribute 'add_child'

如果我用r1(或其他方式)替換代碼最后一行中的“ b”,則可以找到它,但是當然不代表數據……在此先感謝Universe。

像這樣:

t = Tree() # Creates an empty tree
r1 = t.add_child(name="r1")
lookup = {"r1": r1}

def sort_pairs(pair):
    # Extract integer after "r".
    return int(pair[0][1:])

for pair in sorted(pairs_list, key=sort_pairs):
    parentname = pair[0]
    childname = pair[1]
    if childname not in lookup:
        if parentname in lookup:
            # Add child.
            newchild = lookup[parentname].add_child(name = childname)
            lookup.add(childname, newchild)
        else:
            raise RuntimeError('Must not happen.')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM