对列表列表进行排序以获取最后一列的唯一ID

2024-04-26 10:33:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我将这些数据保存在一个文件中:

['5',60680,60854,'gene_id "ENS1"']
['5',59106,89211,'gene_id "ENS1"']
['5',58686,58765,'gene_id "ENS1"']
['5',80835,93381,'gene_id "ENS2"']
['5',55555,92223,'gene_id "ENS2"']
['5',73902,74276,'gene_id "ENS2"']

我需要python的帮助来获得一个输出,以确保第4列中的项出现 仅当第二列具有最小值且第三列具有第四列项目中的最大值时。所以我希望我的输出是这样的:

^{pr2}$

第4列中的每个项目只能出现一次。我怎样才能去掉数据周围的[]。非常感谢。在


Tags: 文件数据项目idgenepr2ens1ens2
2条回答
import re
pat = re.compile("\['[^']+',([^,]+),([^,]+),'([^']+)']")

ch = '''
['5',60680,60854,'gene_id "ENS1"']
['5',59106,89211,'gene_id "ENS1"']
['5',58686,58765,'gene_id "ENS1"']
['5',80835,93381,'gene_id "ENS2"']
['5',55555,92223,'gene_id "ENS2"']
['5',73902,74276,'gene_id "ENS2"']'''

li = pat.findall(ch)
print li

deekmin = {}
deekmax = {}
for a,b,c in li[1:]:
    if c in deekmin:
        if a<deekmin[c]:
            deekmin[c] = a
        if b>deekmax[c]:
            dekkmax[c] = b
    else:
        deekmin[c] = a
        deekmax[c] = b

res = [ (deekmin[c],deekmax[c],c) for c in deekmin ]
print res
>>> from itertools import groupby
>>> for i, j in groupby(lst, key=lambda x: x[3]):
    t = list(zip(*j))
    print(t[0][0], min(t[1]), max(t[2]), t[3][0])


5 58686 89211 gene_id "ENS1"
5 55555 93381 gene_id "ENS2"

现在还不清楚,删除[]是什么意思,这些只是python列表的语法。在

相关问题 更多 >