如何从具有列表值的字典中获取一系列键来检索所有可能的组合

时间:2013-01-21 02:44:24

标签: python biopython

我有这个词典

d={'M':['ATG'],'D':['GAC','GAT'],'E':['GAA','GAG']}

在给定一系列键的情况下,我想要的输出是包含所有可能序列的列表。 (也可以是一个字符串,其中所有可能的序列都在单独的行“\ n”)

sequence = "MDE" 

因此,输出应该如下:

['ATGGACGAA','ATGGACGAG','ATGGATGAA','ATGGATGAG']

到目前为止我尝试的是以下内容,但当然不是我想要的:

seq_trans = ''

for aa in sequence:
  for k, v in d.iteritems():
    if k == aa:
      for item in v:
        seq_trans= seq_trans + item
print seq_trans

我得到的“MDE”是:

'ATGGACGATGAAGAG'

1 个答案:

答案 0 :(得分:7)

你可以在这里使用itertools.product,它返回输入迭代的笛卡尔乘积。

In [78]: seq="MED"

In [79]: ["".join(x) for x in product(*(d[y] for y in seq))]
Out[79]: ['ATGGAAGAC', 'ATGGAAGAT', 'ATGGAGGAC', 'ATGGAGGAT']