簡體   English   中英

如何使用不同大小的列表創建 Python 字典?

[英]How do you create a python dictionary using lists of different size?

我一直在學習使用正則表達式操作字符串,但是在使用我正在使用的一些數據格式化字典時遇到了問題。 這是我正在努力處理的代碼的簡化版本:

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'

我正在嘗試將我命名為“蛋白質”的項目與我使用 python 中的 .findall() 函數找到的結果序列進行匹配。 基本上我想做以下事情:

{'A':['NTTI'],'C':['NYSG','NISN']}

我不明白為什么使用 .findall() 函數找到的被放入字典的對象是在所有鍵('A'、'B'、'C')下完成的,而不是它們的特定鍵或為什么我似乎無法在一個鍵下附加使用 .findall() 找到的對象列表。 我確定這只是與語法有關,但我已經嘗試過 {k:v for k,v in zip(list1,list2)} 這就是我被告知要制作包含兩個列表的字典的方式,並且我似乎無法弄清楚如何讓它在列表中插入一個列表。 我該怎么做呢?

您可以使用列表理解來構建元組對的完整蛋白質列表,然后使用字典理解來過濾掉空列表值。 這可以在單個 dict 理解中完成,但將其分為兩步會更清晰一點,並且可以節省對findall進行笨拙的額外調用以提取蛋白質序列。

import re

line = ">sp|A|PE=3 SV=1 IDMANTTI >sp|B|PE=3 SV=1 EVPFYPKA >sp|C| PE=3 SV=2 QRWLFNYSGNISN"
protein_pattern = r"sp\|(\w+)\|.+?SV=\d\s([A-Z]+)"
sites_pattern = r"N[^P][ST][^P]"

all_proteins = [
    (k, re.findall(sites_pattern, v)) 
    for k, v in re.findall(protein_pattern, line)
]
sites = {k: v for k, v in all_proteins if v}

print(sites) # => {'A': ['NTTI'], 'C': ['NYSG', 'NISN']}
import re

line=">sp|A|PE=3 SV=1 IDMANTTI >sp|B|PE=3 SV=1 EVPFYPKA >sp|C| PE=3 SV=2 QRWLFNYSGNISN"

p_and_a=re.findall(r'sp\|(\w+)\|.+?SV=\d\s([A-Z]+)', line) 

sites =  { protein : re.findall(r'N[^P][ST][^P]', amino)  for protein, amino in p_and_a }

print(sites)

# {'A': ['NTTI'], 'B': [], 'C': ['NYSG', 'NISN']}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM