Python计算具有多个键的值的所有实例

2024-04-29 10:44:36 发布

您现在位置:Python中文网/ 问答频道 /正文

跳转到编辑以获得更好的解释!

我已经试着解决这个问题好几个小时了,我的头都痛了(特别是因为我之前已经解决了,但不记得是怎么解决的,我用我的解决方案的脚本存储在学校的一台计算机上)。在

好吧,这就是我的问题。在给定的a、T、G和C序列中(是的,这就是DNA),我必须找到所有的氨基酸并计算出它们有多少。通俗地说,归根结底就是这样。在

我必须搜索特定模式的序列(也称为密码子),这些是三个字母长的A和/或T和/或G和/或C。每个氨基酸至少有一个密码子与之相关。我的工作是计算每种氨基酸的出现量。在

在第二个table中,您将看到左侧的氨基酸和右侧的相关密码子。在

我有一本字典是这样设置的:

    aaDic = {'ttt': 'F', 'tct': 'S', 'tat': 'Y', 'tgt': 'C',
    'ttc': 'F', 'tcc': 'S', 'tac': 'Y', 'tgc': 'C',
    'tta': 'L', 'tca': 'S', 'taa': '*', 'tga': '*',
    'ttg': 'L', 'tcg': 'S', 'tag': '*', 'tgg': 'W',
    'ctt': 'L', 'cct': 'P', 'cat': 'H', 'cgt': 'R',
    'ctc': 'L', 'ccc': 'P', 'cac': 'H', 'cgc': 'R',
    'cta': 'L', 'cca': 'P', 'caa': 'Q', 'cga': 'R',
    'ctg': 'L', 'ccg': 'P', 'cag': 'Q', 'cgg': 'R',
    'att': 'I', 'act': 'T', 'aat': 'N', 'agt': 'S',
    'atc': 'I', 'acc': 'T', 'aac': 'N', 'agc': 'S',
    'ata': 'I', 'aca': 'T', 'aaa': 'K', 'aga': 'R',
    'atg': 'M', 'acg': 'T', 'aag': 'K', 'agg': 'R', 
    'gtt': 'V', 'gct': 'A', 'gat': 'D', 'ggt': 'G',
    'gtc': 'V', 'gcc': 'A', 'gac': 'D', 'ggc': 'G',
    'gta': 'V', 'gca': 'A', 'gaa': 'E', 'gga': 'G',
    'gtg': 'V', 'gcg': 'A', 'gag': 'E', 'ggg': 'G'
   }

我当然可以计算出每个密码子出现的数量,但由于每个氨基酸都有不止一个密码子,所以我真的需要特定密码子的总和。在

^{pr2}$

(s是上述代码中a、t、c、g的序列)。例如:

tta、ttg、ctt、ctc、cta、ctg都与氨基酸“L”有关,所以我需要将所有出现的tta、ttg、ctt、ctc、cta、ctg相加,得到氨基酸“L”出现的总量。在

我希望我足够清楚,这有点难以解释,尤其是在你自己尝试了这么久却失败之后(这通常意味着你对自己在做什么几乎一无所知,至少我就是这样:D)

编辑:

让我试着让自己更清楚一点:

  1. 我们得到了一个由字母a、T、C和G组成的序列
  2. 我们必须把这个序列三个一个地解析。

    suppose the sequence is "TTCTTACTC" we get "TTC", "TTA", "CTC"

  3. 我们现在在字典中查找这些键,然后找到相关的氨基酸: TTC是F TTA是我 CTC是L
  4. 我们需要计算并在一个列表中存储F、L和字典中的任何其他值(flimvspy*HQNKDECWRSG)。在
期望的输出是这样的字典:
{L:total no. of the amino acid 'L' in the sequence, S:total no. of the amino acid 'S' in the sequence, ...}

Tags: the编辑字典字母序列密码子ttasequence
3条回答

如果您没有2.7+,您仍然可以使用defaultdict

counts = collections.defaultdict(int)
for k in aaDic:
    counts[aaDic[k]] += 1

如果使用python2.7或更高版本,可以使用collections.Counter来计算氨基酸。首先,将碱基序列分成密码子,然后计算每个密码子对应的氨基酸:

base_seq = "atcgtgagt"
codons = [base_seq[i:i + 3] for i in range(0, len(base_seq), 3)]
amino_acid_counts = collections.Counter(aaDict[c] for c in codons)

注意,生成器表达式(aaDict[c] for c in codons)生成一个氨基酸序列,而不管它们是由哪个密码子编码的。在

如果使用早期版本的Python,还可以使用普通字典进行计数:

^{pr2}$

尝试以下操作:

y = {}
for x in aaDic.items():
    y[x[1]] = []
for x in aaDic.items():
    y[x[1]].append(x[0])

然后,您可以使用以下X键查找所有值:

^{pr2}$

相关问题 更多 >