簡體   English   中英

從列表清單制作字典

[英]Making a dictionary from a list of lists

我一直無法弄清楚,我認為問題可能出在我制作列表清單的方式上。 有人可以幫忙嗎? 謝謝!

我想要的結果是

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

從集合導入defaultdict

codondict = defaultdict(列表)

對於我的氨基酸:

...對於i中的j:(也對list(i)中的j進行了嘗試)

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

codondict

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

您可以嘗試以下方法:

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

滿足您需要的另一種方法是使用locals()函數,該函數返回一個字典,該字典包含本地范圍的整個變量集,變量名作為鍵,其內容作為值。

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

因此,您可以使用以下方法獲取A列表: locals()['A']

這有點冗長,並且使變量'A'的名稱與值A混淆。 保持您所擁有的:

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

應該為您提供您要的字典:

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

其中鍵'A''C'的順序可能不是您返回的,因為字典沒有順序。

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

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

最好像stummjr的解決方案那樣依賴locals()而不是globals(),但是直接使用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。 它足夠小,可以在交互模式下使用,但是不建議在較大的代碼中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM