【问题标题】:How to retrieve all possible combinations given a sequence of keys from a dictionary with list values如何从具有列表值的字典中检索给定一系列键的所有可能组合
【发布时间】:2013-01-21 02:44:23
【问题描述】:

例如,我有这本词典

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'

【问题讨论】:

  • MED 似乎与您的输出不匹配;你是说 MDE 吗?
  • 是的,你是对的 DSM...我刚刚更改了它...是的,顺序很重要

标签: python biopython


【解决方案1】:

你可以在这里使用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']

【讨论】:

  • 嗯。打败我:我在写[''.join(p) for p in product(*(d[c] for c in sequence))]。每当问题涉及“所有可能”或“所有可能性”时,您都知道itertools 将参与其中。 ;^)
  • 我也在写同样的东西,除了生成器表达式部分。
  • “一种显而易见的方法”,正如他们所说!
  • itertools: 从py2.3开始让python程序员的生活变得轻松。
  • 嘿,如果我从 txt 文件中读取序列怎么办?我尝试了您的回答,但出现错误: Traceback (last recent call last): File "", line 2, in File "", line 2, in KeyError: '\ n'
猜你喜欢
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多