从列表列表中创建字典

时间:2012-07-20 00:38:36

标签: python list dictionary

我一直无法解决这个问题,我认为问题可能在于我制作列表清单的方式。任何人都可以帮忙吗?谢谢!

我希望的结果是

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'})

    
  

4 个答案:

答案 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历史版本。这个小到足以在交互模式下有用,但不建议在更大的代码中使用。