我一直在学习用regex操作字符串,但是遇到了用我正在处理的一些数据格式化字典的问题。下面是我正在努力解决的代码的简化版本:
import re
line=">sp|A|PE=3 SV=1 IDMANTTI >sp|B|PE=3 SV=1 EVPFYPKA >sp|C| PE=3 SV=2 QRWLFNYSGNISN"
NGly_Sites=[]
protein_list=[]
p_and_a=re.findall(r'sp\|(\w+)\|.+?SV=\d\s([A-Z]+)', line)
for protein, amino in p_and_a:
print(protein, amino)
protein_list.append(protein)
NGly_Sites=re.findall(r'N[^P][ST][^P]', amino)
print(NGly_Sites)
Sites={k:v for k,v in zip(protein_list, NGly_Sites)}
print(Sites)
它会打印:
A IDMANTTI
['NTTI']
B EVPFYPKA
[]
C QRWLFNYSGNISN
['NYSG', 'NISN']
{'A': 'NYSG', 'B': 'NISN'
我正在尝试将我命名为“protein”的项目与我在python中使用.findall()函数找到的结果序列进行匹配。基本上我想做以下几点:
{'A':['NTTI'],'C':['NYSG','NISN']}
我不明白为什么使用.findall()函数找到的对象放在字典中,是在所有键('A','B','C')下,而不是在它们的特定键下,或者为什么我不能在一个键下附加使用.findall()找到的对象的列表。我确信这只是和语法有关,但我已经用{k:v代表k,v在zip(list1,list2)}中进行了实验,这就是我被告知要用两个列表创建一个字典的方式,我似乎不知道如何让它在一个列表中插入一个列表。我该怎么做呢?你知道吗
您可以使用列表理解来构建元组对的完整蛋白质列表,然后使用dict理解来过滤空列表值。这可以在一个单独的dict理解中完成,但是把它分成两个步骤要清楚一点,这样就省去了额外调用
findall
提取蛋白质序列的麻烦。你知道吗相关问题 更多 >
编程相关推荐