簡體   English   中英

通過元組字典解析

[英]Parsing through a dictionary of tuples

通過使用迭代和理解,我創建了一個python字典,用於存儲與值(與某些功能相關的統計信息)關聯的鍵。 這些鍵是指唯一的ID(在我的情況下是基因)。 我用一個元組列表填充了這些值,每個元組表示基因ID的特征(在這種情況下,是ORF或換句話說, 潛在的蛋白質編碼序列 )的起點長度 任何給定的基因都可以具有許多這樣的特征。 一般形式如下:

{key1:[(startpoint1,length1)], key2[(startpoint1,length1)(startpoint2,length2)...], key3[]}

如下所示(在一個示例字典中),某些鍵可能只有一個功能(只有一個元組對),而另一些鍵可能多達100個或更多。 為簡單起見,我顯示了3對seq1。 也可以有沒有功能的鍵,例如seq3和4。

{'seq2': [(1,6)], 'seq1': [(1, 12), (16, 9), (32,9)], 'seq3': [], 'seq4': []}

我想遍歷此字典以在“長度”最大時獲得“起點”。 在我的示例中,我應該得到的答案是

起點1 (在seq1中),因為它在所有條目中具有最大的長度值(12)

我發現很難遍歷多個元組。

這段代碼應該做。

myDict = {'seq2': [(1,6)], 'seq1': [(1, 12), (16, 9), (32,9)], 'seq3': [], 'seq4': []}

maxLength = 0;
maxStartingPoint = 0;
maxSeq = ""

for sequence in myDict:

    for key,value in myDict[sequence]:
        if value > maxLength:
            maxLength = value
            maxStartingPoint = key
            maxSeq = sequence

您還可以使用itertools.chain.from_iterable ,將其傳遞給dict.values() (字典中所有值的列表)。 然后將max與key參數一起使用,以獲取具有第二個索引(1-index)處最大值的元組,示例-

>>> from itertools import chain
>>> d = {'seq2': [(1,6)], 'seq1': [(1, 12), (16, 9), (32,9)], 'seq3': [], 'seq4': []}
>>> max(chain.from_iterable(d.values()),key=lambda x: x[1])
(1, 12)

itertools.chain.from_iterable ,將它獲得的可迭代對象作為輸入,並將每個可迭代對象鏈接到一個列表中,例如-

>>> l = [(1,2),(3,4)]
>>> list(chain.from_iterable(l))
[1, 2, 3, 4]

這是我的方法:創建一個元組列表(length, start_point, key) ,這樣, max函數可以選擇長度最大的元組。

def maxlen(seq):
    longest = max((length, start_point, key) for key, value in seq.iteritems() for start_point, length in value)
    return longest

# Test
seq = {'seq2': [(1,6)], 'seq1': [(1, 12), (16, 9), (32,9)], 'seq3': [], 'seq4': []}
length, start_point, key = maxlen(seq)  # 12, 1, 'seq1'

暫無
暫無

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

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