Используя значение словаря в качестве ключа в другом словаре и частоту ключа в качестве значения, Python 3.6 - PullRequest
0 голосов
/ 02 октября 2018

У меня есть словарь:

CodonDict = {'ATT':'I', 'ATC':'I', 'ATA':'I', 'CTT':'L', 'CTC':'L',...} Словарь продолжается для 64 других уникальных триплетов.

Я перебираю текстовый файл, который по сути представляет собой одну гигантскую строку.Мой код прямо сейчас обновляет пустой словарь с 64 записями с ключами от 0 до 63:

TripletCount = {0: 18626, 1: 9187, 2: 9273, 3: 9154, 4: 37129, 5: 36764, 6: 18468,...}, со значением, являющимся частотой триплета (однако ключ является целым числом).

TripletCount = {}

Я хотел бы использовать значения из CodonDict в качестве ключа в TripletCount с частотой ключа в качестве значения в TripletCount.

Я программировал на python раньше, но словари форматирования никогда не были моей сильной стороной.

Файл данных, который я перебираю, хотя по сути выглядит так:

'GTGGCTTCTCTTCTCCACTCCTCTTTTTATTCCTTCCCAAACAAGAAGGTTAGTTATTATTATTTCCAGA...'

РЕДАКТИРОВАТЬ:

Пример того, что я пытаюсь получить;

TripletCount = {'I': 18626, 'V': 9187, 'L': 9273, 'Y': 9154, 'E': 37129,...}

РЕДАКТИРОВАТЬ 2:

В соответствии с запросом: я планирую разрешить конфликты ключей, добавляя счетчики в списки, поскольку различные типы пар оснований могут идентифицировать одну и ту же аминокислоту, поэтому {'I': [18626, 9187, 9154], ...}

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Ключи уникальны в словаре, поэтому в TripletCount каждое значение будет равно 1.Поправьте меня, если я неправильно понял ваш вопрос.

Следующий код может решить вашу проблему, используя defaultdict из defaultdict

from collections import defaultdict as ddict


CodonDict = {'ATT':'I',   'ATC':'I',  'ATA':'I',  'CTT':'L',  'CTC':'L'}
TripletCount = ddict(lambda:ddict(int))


for key,value in CodonDict.items():
    TripletCount[value][key] += 1

Значения в TrpletCount являются значениями по умолчанию, вы можете преобразовать их в списки, например map.

0 голосов
/ 02 октября 2018

Вы можете перебирать свои данные, просматривая по три последовательных символа за раз и проверяя, является ли каждая строка из трех символов ключом в вашем CodonDict словаре.Если это так, вы можете увеличить значение TripletCount.

Например, используя ваш набор данных из вопроса:

CodonDict = {'ATT':'I',   'ATC':'I',  'ATA':'I',  'CTT':'L',  'CTC':'L'}
TripletCount = {}
data = 'GTGGCTTCTCTTCTCCACTCCTCTTTTTATTCCTTCCCAAACAAGAAGGTTAGTTATTATTATTTCCAGA'

for i in range(3, len(data)): # iterates through your data string 
    triplet = CodonDict.get(data[i-3:i]) # check if the next 3 characters in a row are a key in CodonDict
    if triplet: # if it is a key: increment the count of its value by one
        TripletCount[triplet] = TripletCount.get(triplet, 0) + 1

print(TripletCount)
{'I': 4, 'L': 8}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...