0

我一直无法弄清楚这一点,我认为问题可能出在我制作列表的方式上。任何人都可以帮忙吗?谢谢!

我想要的结果是

codondict = {'A': ['GCT','GCC','GCA','GCG'], 'C': ['TGT','TGC'], &c

但我得到的是:

{'A':'A','C':'C',&c。

这是我的终端:

A=['GCT','GCC','GCA','GCG']

C=['TGT','TGC']

D=['GAT','GAC']

E=['GAA','GAG']

F=['TTT','TTC']

G=['GGT','GGC','GGA','GGG']

H=['CAT','CAC']

我=['ATT','ATC','ATA']

K=['AAA','AAG']

L=['TTA','TTG','CTT','CTC','CTA','CTG']

M=['ATG']

N=['AAT','AAC']

P=['CCT','CCC','CCA','CCG']

Q=['CAA','CAG']

R=['CGT','CGC','CGA','CGG','AGA','AGG']

S=['TCT','TCC','TCA','TCG','AGT','AGC']

T=['ACT','ACC','ACA','ACG']

V=['GTT','GTC','GTA','GTG']

W=['TGG']

Y=['TAT','TAC']

氨基酸=['A','C','D','E','F','G','H','I','K','L','M','N' ,'P','Q','R','S','T','V','W','Y']

从集合导入 defaultdict

codondict=defaultdict(列表)

对于氨基酸中的 i:

...对于 i 中的 j:(也尝试了列表(i)中的 j)

... ... codondict[i]=j ...

共犯

defaultdict(, {'A': 'A', 'C': 'C', 'E': 'E', 'D': 'D', 'G': 'G', 'F': 'F ','I':'I','H':'H','K':'K','M':'M','L':'L','N':'N', 'Q':'Q','P':'P','S':'S','R':'R','T':'T','W':'W','V' ':'V','Y':'Y'})

4

4 回答 4

3

你可以试试这个:

condondict= dict(A=['GCT','GCC','GCA','GCG'],
C=['TGT','TGC'],
D=['GAT','GAC'],
E=['GAA','GAG'],
F=['TTT','TTC'],
G=['GGT','GGC','GGA','GGG'],
H=['CAT','CAC'],
I=['ATT','ATC','ATA'],
K=['AAA','AAG'],
L=['TTA','TTG','CTT','CTC','CTA','CTG'],
M=['ATG'],
N=['AAT','AAC'],
P=['CCT','CCC','CCA','CCG'],
Q=['CAA','CAG'],
R=['CGT','CGC','CGA','CGG','AGA','AGG'],
S=['TCT','TCC','TCA','TCG','AGT','AGC'],
T=['ACT','ACC','ACA','ACG'],
V=['GTT','GTC','GTA','GTG'],
W=['TGG'],
Y=['TAT','TAC'])

使用的原因defaultdict()是允许访问/创建字典值而不会导致 KeyError,或者使用以下形式绕过:

if key not in mydict.keys():
    mydict[key] = []
mydict[key].append(something)

如果您没有动态创建新密钥,那么您实际上不需要使用defaultdict().

此外,如果您的键已经代表氨基酸,您只需遍历键本身。

for aminoacid, sequence in condondict.iteritems():
    # do stuff with with data...
于 2012-07-20T00:47:41.493 回答
1

另一种方法是使用该locals()函数,它返回一个字典,其中包含本地范围的整个变量集,变量名作为键,其内容作为值。

for i in aminoacids:
    codondict[i] = locals()[i]

因此,您可以获取A列表,例如,使用:locals()['A']

于 2012-07-20T00:56:32.837 回答
0

您也可以使用内置的 globals() 和 dict 理解:

codondict = {k:globals()[k] for k in aminoacids}

最好依赖 locals() 而不是 globals(),就像 stummjr 的解决方案一样,但是你不能直接用 dict 理解这样做

codondict = dict([(k,locals()[k]) for k in aminoacids])

但是,您可以这样做:

loc = locals()
codondict = {k:loc[k] for k in aminoacids}

如果你动态地改变你的氨基酸列表或氨基酸分配,最好使用一些更懒惰的东西,比如:

codondict = lambda: {k:globals()[k] for k in aminoacids}

最后,您可以随时使用更新的字典,但它现在是可调用的,因此使用 codondict()[x] 而不是 codondict[x] 来获取实际的字典。这样,您可以像 hist = codondict() 一样存储整个 dict,以防您需要比较 codondict 的不同历史版本。这足够小,可以在交互模式下使用,但不建议在更大的代码中使用。

于 2012-07-22T07:23:37.710 回答
0

这有点冗长,并且混淆了变量的名称'A'和它的值A。保持你所拥有的:

aminoacids = { 'A': A, 'C': C, 'D': D ... }

应该给你你要的字典:

{ 'A' : ['GCT', 'GCC', 'GCA', 'GCG'], 'C' : ['TGT', 'TGC'], ... }

其中键的顺序'A'可能'C'不是你得到的,因为字典没有排序。

于 2012-07-20T00:43:06.287 回答