[英]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.