Создание словаря по данным из txt файла python
есть txt файл с данным собержимым:
UUU F CUU L AUU I GUU V
UUC F CUC L AUC I GUC V
UUA L CUA L AUA I GUA V
UUG L CUG L AUG M GUG V
UCU S CCU P ACU T GCU A
UCC S CCC P ACC T GCC A
UCA S CCA P ACA T GCA A
UCG S CCG P ACG T GCG A
UAU Y CAU H AAU N GAU D
UAC Y CAC H AAC N GAC D
UAA Stop CAA Q AAA K GAA E
UAG Stop CAG Q AAG K GAG E
UGU C CGU R AGU S GGU G
UGC C CGC R AGC S GGC G
UGA Stop CGA R AGA R GGA G
UGG W CGG R AGG R GGG G
и есть функция которая должна по данным собрать словарь по типу F: UUU, UUC; I: AUU, AUC и т.д
def translate_rna_to_protein(rna):
protein = ""
p = open('rna_codon_table.txt', 'r')
for line in p:
for i in line.split():
if line.split().index(i) % 2 == 0:
print('1')
else:
print('2')
return protein
однако первый элемент строки является ключом для ещё не созданного значения. Нужна помощь в реализации такого словаря для последующего использования.
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
import re
from itertools import groupby
with open(filename) as f:
data = f.read()
res = [(a, [z[0] for z in b])
for a,b in groupby(
sorted(
re.findall(r"(\w+)\s(\w+)", data),
key=lambda x: x[1]),
key=lambda x: x[1])]
res = dict(res)
результат:
In [18]: res
Out[18]:
{'A': ['GCU', 'GCC', 'GCA', 'GCG'],
'C': ['UGU', 'UGC'],
'D': ['GAU', 'GAC'],
'E': ['GAA', 'GAG'],
'F': ['UUU', 'UUC'],
'G': ['GGU', 'GGC', 'GGA', 'GGG'],
'H': ['CAU', 'CAC'],
'I': ['AUU', 'AUC', 'AUA'],
'K': ['AAA', 'AAG'],
'L': ['CUU', 'CUC', 'UUA', 'CUA', 'UUG', 'CUG'],
'M': ['AUG'],
'N': ['AAU', 'AAC'],
'P': ['CCU', 'CCC', 'CCA', 'CCG'],
'Q': ['CAA', 'CAG'],
'R': ['CGU', 'CGC', 'CGA', 'AGA', 'CGG', 'AGG'],
'S': ['UCU', 'UCC', 'UCA', 'UCG', 'AGU', 'AGC'],
'Stop': ['UAA', 'UAG', 'UGA'],
'T': ['ACU', 'ACC', 'ACA', 'ACG'],
'V': ['GUU', 'GUC', 'GUA', 'GUG'],
'W': ['UGG'],
'Y': ['UAU', 'UAC']}
Автор решения: Mike
→ Ссылка
p = open('data.txt', 'r')
protein = {}
for line in p:
data = line.split()
for v, k in zip(data[::2], data[1::2]):
protein.setdefault(k, []).append(v)
print(protein)