【问题标题】:Making a dictionary from a list of lists从列表列表中制作字典
【发布时间】:2012-07-20 00:38:35
【问题描述】:

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

我想要的结果是

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']

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']

从集合导入默认字典

codondict=defaultdict(列表)

对于氨基酸中的 i:

... for j in i:(ALSO TRIED for j in list(i))

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

【问题讨论】:

    标签: python list dictionary


    【解决方案1】:

    你可以试试这个:

    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...
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        应该给你你要的字典:

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

        其中'A''C' 键的顺序可能不是您返回的,因为字典没有排序。

        【讨论】:

          【解决方案4】:

          您也可以使用内置的 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() 一样存储整个字典,以防您需要比较 codondict 的不同历史版本。这足够小,可以在交互模式下使用,但不建议在更大的代码中使用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-06-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-01
            • 1970-01-01
            • 2014-11-29
            • 1970-01-01
            相关资源
            最近更新 更多