我一直无法解决这个问题,我认为问题可能在于我制作列表清单的方式。任何人都可以帮忙吗?谢谢!
我希望的结果是
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 = [ '猫', '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']
氨基酸= [ 'A', 'C', 'd', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y']
from collections import defaultdict
codondict = defaultdict(列表)
对于氨基酸中的i:
...对于i中的j :(对于列表(i)中的j也是如此)
...... ... codondict [i] = j ......
codondict
defaultdict(,{'A':'A','C':'C','E':'E','D':'D','G':'G','F' :'F','我':'我','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'})
答案 0 :(得分: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()
。
此外,如果您的密钥已经代表 aminoacids ,那么您只需迭代密钥本身。
for aminoacid, sequence in condondict.iteritems():
# do stuff with with data...
答案 1 :(得分:1)
执行所需操作的另一种方法是使用locals()
函数,该函数返回包含本地范围的整个变量集的字典,变量名称作为键,其内容作为值。
for i in aminoacids:
codondict[i] = locals()[i]
因此,您可以使用A
获取locals()['A']
列表。
答案 2 :(得分:0)
这种冗长,并且将变量'A'
的名称与其值A
混淆。保持你所拥有的:
aminoacids = { 'A': A, 'C': C, 'D': D ... }
应该为您提供您要求的词典:
{ 'A' : ['GCT', 'GCC', 'GCA', 'GCG'], 'C' : ['TGT', 'TGC'], ... }
其中键'A'
和'C'
的顺序可能不是您获取的顺序,因为字典未被排序。
答案 3 :(得分:0)
你也可以使用内置的globals()和dict comprehension:
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历史版本。这个小到足以在交互模式下有用,但不建议在更大的代码中使用。