[英]Python dictionary match any element of key
如果一个人有如下的字典:
aminoacids = {
("GAU", "GAC"): "Asp",
("GAA", "GAG"): "Glu",
("UGU", "UGC"): "Cys",
}
有没有办法匹配键的任何元素来获取值?
我试过简单地使用get
:
aminoacids.get("GAA")
它返回 None,因为它不严格匹配整个键,尽管"GAA"
包含在值为"Glu"
的键中。
有没有办法获得以下行为:
>>> aminoacids = {
("GAU", "GAC"): "Asp",
("GAA", "GAG"): "Glu",
("UGU", "UGC"): "Cys",
}
>>> aminoacids.someFunction("GAA")
>>> "Glu"
我检查了文档,但似乎没有 function 。
有任何想法吗? 谢谢!
不,没有。 相反,使用字典的替代形式,可以有重复的值,所以:
amino acids ={
"GUA": "Asp",
"GAC": "Asp",
"GAA": "Glu",
"GAG": "Glu",
"UGU": "Cys",
"UGC": "Cys"
}
如果你想让设置比完整的 64 键字典更简洁,你可以首先设置一个列表(或元组)字典,每个氨基酸一个,然后构建你的 base->amino 查找表格如下:
from itertools import product
bases = 'UCAG'
amino_codes = dict(Asp=('GAU','GAC'),
Glu=('GAA', 'GAC'),
Leu=['CU'+b for b in bases] + ['UUA','UUG'],
Ser=['UC'+b for b in bases], # list comprehensions just to show the concept
Stop=('UAA,UAG,UGA') # You do the rest
)
bases_to_amino = {}
for triplet in product(bases, repeat=3):
base_key = ''.join(triplet)
amino = next((a for (a, pat) in amino_codes.items() if base_key in pat), 'missing')
bases_to_amino[base_key] = amino
from pprint import pprint
pprint(bases_to_amino)
{'AAA': 'missing',
'AAC': 'missing',
'AAG': 'missing',
'AAU': 'missing',
'ACA': 'missing',
'ACC': 'missing',
'ACG': 'missing',
'ACU': 'missing',
'AGA': 'missing',
'AGC': 'missing',
'AGG': 'missing',
'AGU': 'missing',
'AUA': 'missing',
'AUC': 'missing',
'AUG': 'missing',
'AUU': 'missing',
'CAA': 'missing',
'CAC': 'missing',
'CAG': 'missing',
'CAU': 'missing',
'CCA': 'missing',
'CCC': 'missing',
'CCG': 'missing',
'CCU': 'missing',
'CGA': 'missing',
'CGC': 'missing',
'CGG': 'missing',
'CGU': 'missing',
'CUA': 'Leu',
'CUC': 'Leu',
'CUG': 'Leu',
'CUU': 'Leu',
'GAA': 'Glu',
'GAC': 'Asp',
'GAG': 'missing',
'GAU': 'Asp',
'GCA': 'missing',
'GCC': 'missing',
'GCG': 'missing',
'GCU': 'missing',
'GGA': 'missing',
'GGC': 'missing',
'GGG': 'missing',
'GGU': 'missing',
'GUA': 'missing',
'GUC': 'missing',
'GUG': 'missing',
'GUU': 'missing',
'UAA': 'Stop',
'UAC': 'missing',
'UAG': 'Stop',
'UAU': 'missing',
'UCA': 'Ser',
'UCC': 'Ser',
'UCG': 'Ser',
'UCU': 'Ser',
'UGA': 'Stop',
'UGC': 'missing',
'UGG': 'missing',
'UGU': 'missing',
'UUA': 'Leu',
'UUC': 'missing',
'UUG': 'Leu',
'UUU': 'missing'}
在这种情况下,您不会从练习中获得太多东西,但是对于需要处理超过 64 种排列的类似情况,这些概念可能很有价值。
旁注:
amino_codes
中混合元组和列表的方式。 我会接受这是一个较轻的罪行。amino = next(blah)
用于在找到匹配项后停止寻找匹配项。.
find_amino = lambda t: next((a for (a, pat) in amino_codes.items() if t in pat), 'missing')
bases_to_amino = dict((bk, find_amino(bk)) for bk in (''.join(t) for t in product(bases, repeat=3)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.