मेरे पास लाखों डीएनए अनुक्रमों के साथ एक फास्टा फ़ाइल है - प्रत्येक डीएनए अनुक्रम के लिए, एक आईडी भी है।

>seq1
AATCAG #----> 5mers of this line are AATCA and ATCAG
>seq3
AAATTACTACTCTCTA
>seq19
ATTACG #----> 5mers of this line are ATTAC and TTACG

मैं जो करना चाहता हूं वह यह है कि यदि डीएनए अनुक्रम की लंबाई 6 है तो मैं उस रेखा के 5mers बना देता हूं (कोड और ऊपर में दिखाया गया है)। तो जो चीज मैं हल नहीं कर सका वह यह है कि मैं एक शब्दकोश बनाना चाहता हूं जो शब्दकोश दिखाता है कि कौन से 5mers sequence id से आते हैं।

यहां मेरा कोड है लेकिन यह आधा रास्ते है:

from Bio import SeqIO
from Bio.Seq import Seq

with open(file, 'r') as f:
    lst = []
    dict = {}
    for record in SeqIO.parse(f, 'fasta'): #reads the fast file 
        if len(record.seq) == 6:  #considers the DNA sequence length
            for i in range(len(record.seq)):
                kmer = str(record.seq[i:i + 5])
                if len(kmer) == 5:
                    lst.append(kmer)
                    dict[record.id] = kmer  #record.id picks the ids of DNA sequences


    #print(lst)
                    print(dict)

वांछित शब्दकोश इस तरह दिखना चाहिए:

dict = {'seq1':'AATCA', 'seq1':'ATCAG', 'seq19':'ATTAC','seq19':'TTACG'}
1
Apex 23 मार्च 2021, 12:45
1
आपके पास डिक्शनरी में डुप्लीकेट कुंजियाँ नहीं हो सकती हैं उदा। "seq19".
 – 
Matthias
23 मार्च 2021, 12:48
क्या कोई वैकल्पिक तरीका है?
 – 
Apex
23 मार्च 2021, 12:49
शब्दकोश के बजाय सूची का प्रयोग करें
 – 
Suleman Elahi
23 मार्च 2021, 12:53
बस इसका उल्लेख करने के लिए - यदि मेरे पास एक सूची या एक शब्दकोश है जो दिखा रहा है कि कौन सा 5mer किस अनुक्रम आईडी से आता है - डाउनस्ट्रीम विश्लेषण में मुझे प्रत्येक अनुक्रम आईडी और संबंधित 5mers पर लूप करने की आवश्यकता है
 – 
Apex
23 मार्च 2021, 12:57
देखें कि क्या इससे मदद मिलती है.. ">stackoverflow.com/questions/10664856/…
 – 
Suleman Elahi
23 मार्च 2021, 13:00

1 उत्तर

सबसे बढ़िया उत्तर

defaultdict का उपयोग करके में डुप्लीकेट कुंजियों के साथ एक डिक्शनरी बनाएं @SulemanElahi द्वारा Python क्योंकि आपके पास डिक्शनरी में डुप्लीकेट कुंजियां नहीं हो सकती हैं

from Bio import SeqIO
from collections import defaultdict

file = 'test.faa'

with open(file, 'r') as f:
    dicti = defaultdict(list)
    for record in SeqIO.parse(f, 'fasta'): #reads the fast file 
        if len(record.seq) == 6:  #considers the DNA sequence length
                kmer = str(record.seq[:5])
                kmer2 = str(record.seq[1:])
                dicti[record.id].extend((kmer,kmer2))  #record.id picks the ids of DNA sequences

print(dicti)

for i in dicti:
    for ii in dicti[i]:
        print(i, '   : ', ii) 

आउटपुट:

defaultdict(<class 'list'>, {'seq1': ['AATCA', 'ATCAG'], 'seq19': ['ATTAC', 'TTACG']})
seq1    :  AATCA
seq1    :  ATCAG
seq19    :  ATTAC
seq19    :  TTACG
2
pippo1980 24 मार्च 2021, 10:38