![](/img/trans.png)
[英]Making a dictionary from a list of lists and combining sublist[1] from repeats of sublist[0]
[英]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.