保留最长的异构体-python字典中的多个键
我试图从一个很长的列表中删除最小的异构体,因为我只想使用最长的异构体。 以下是我的数据的外观:保留最长的异构体-python字典中的多个键,python,Python,我试图从一个很长的列表中删除最小的异构体,因为我只想使用最长的异构体。 以下是我的数据的外观: comp30035 seq1 608 comp30037 seq1 265 comp3003 seq1 298 comp30043 seq1 236 comp30043 seq3 529 comp30043 seq4 315 comp30043 seq5 1120 对于只有一种亚型(例如,只有seq1)的接触
comp30035 seq1 608
comp30037 seq1 265
comp3003 seq1 298
comp30043 seq1 236
comp30043 seq3 529
comp30043 seq4 315
comp30043 seq5 1120
对于只有一种亚型(例如,只有seq1)的接触鼠,没有问题,但其中许多具有多种亚型(seq2,3…)。例如,对于config comp30043,我只想在列表中保留最长的seq5
我只想保留其中最长的一个,显然我需要保留只有一个异构体的那个
我曾考虑使用python字典,以contigs名称作为键,isoform名称和长度有值,但我没有任何使用多个值的经验
任何提示和帮助我开始是非常感谢的
干杯试试下面的内容,我会试着评论一下,这样你就可以很容易地理解了 我使用字典以如下形式存储元素:
{“compxxxx”:(“seqx”,number)}
输出:
comp30035 ('seq1', 608)
comp30043 ('seq5', 1120)
comp30037 ('seq1', 265)
comp3003 ('seq1', 298)
一个简单的解决方案是使用元组作为字典的值。或者,您甚至可以使用字典本身作为一个值。这里有一段代码[可能可读性比效率更高],可以实现前者 假设您已将数据保存在contigsFile.txt中:
contigDict = {}
for line in open('contigsFile.txt'):
contigId, isoform, length = line.split()
if contigId in contigDict:
curr_Isoform, curr_length = contigDict[contigId]
if int(curr_length) < int(length):
contigDict[contigId] = (isoform, length)
else:
contigDict[contigId] = (isoform, length)
contigDict={}
对于打开的行('contigsFile.txt'):
contigId,isoform,长度=line.split()
如果在contigDict中有contigId:
电流异构体,电流长度=contigDict[contigId]
如果int(当前长度)
希望这有帮助。您能发布您想要的完整输出吗?为了让问题更清楚。当然,在这个例子中,我只想要一个contigs名字的列表,比如:comp30035,comp30037,comp3003,comp30043,什么是“异构体”?哇,这看起来非常完美,我印象深刻!我只是想修改一下,这样以后的输出对我来说更容易,但是非常感谢!!没问题,如果这个答案有用并且解决了你的问题,请随意接受:只是一个简单的问题,这里的k和v是什么?项目间是如何工作的?我有兴趣完全理解它当在字典中循环时,可以使用字典的
iteritems()
方法同时检索键和相应的值。我真的建议你阅读,你会发现一个很好的例子。
contigDict = {}
for line in open('contigsFile.txt'):
contigId, isoform, length = line.split()
if contigId in contigDict:
curr_Isoform, curr_length = contigDict[contigId]
if int(curr_length) < int(length):
contigDict[contigId] = (isoform, length)
else:
contigDict[contigId] = (isoform, length)