Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保留最长的异构体-python字典中的多个键_Python - Fatal编程技术网

保留最长的异构体-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)