我有字典:
CodonDict = {'ATT':'I', 'ATC':'I', 'ATA':'I', 'CTT':'L', 'CTC':'L',...}
该词典可用于其他64个唯一的三元组。
我正在遍历一个基本上是一个巨型字符串的文本文件。我的代码现在使用64个条目更新空字典,键的范围是0到63:
TripletCount = {0: 18626, 1: 9187, 2: 9273, 3: 9154, 4: 37129, 5: 36764, 6: 18468,...}
,其值是三元组的频率(但是密钥是整数)。
TripletCount = {}
我想将CodonDict
的 values 用作TripletCount
中的密钥,并将密钥的频率用作TripletCount
中的值。
我以前用python编程,但是格式化字典从来都不是我的强项。
尽管我正在迭代的数据文件本质上看起来像这样:
'GTGGCTTCTCTTCTCCACTCCTCTTTTTATTCCTTCCCAAACAAGAAGGTTAGTTATTATTATTTCCAGA...'
编辑:
我想要得到的例子;
TripletCount = {'I': 18626, 'V': 9187, 'L': 9273, 'Y': 9154, 'E': 37129,...}
编辑2:
根据要求:我计划通过将计数添加到列表中来解决关键冲突,因为不同类型的碱基对可以识别相同的氨基酸,因此{'I': [18626, 9187, 9154], ...}
答案 0 :(得分:0)
您可以遍历数据,一次查看三个连续的字符,并检查三个字符的每个字符串是否是CodonDict
词典中的键。如果是,则可以增加TripletCount
的值。
例如,使用问题中的样本数据集:
CodonDict = {'ATT':'I', 'ATC':'I', 'ATA':'I', 'CTT':'L', 'CTC':'L'}
TripletCount = {}
data = 'GTGGCTTCTCTTCTCCACTCCTCTTTTTATTCCTTCCCAAACAAGAAGGTTAGTTATTATTATTTCCAGA'
for i in range(3, len(data)): # iterates through your data string
triplet = CodonDict.get(data[i-3:i]) # check if the next 3 characters in a row are a key in CodonDict
if triplet: # if it is a key: increment the count of its value by one
TripletCount[triplet] = TripletCount.get(triplet, 0) + 1
print(TripletCount)
{'I': 4, 'L': 8}
答案 1 :(得分:0)
键在字典中是唯一的,因此在TripletCount
中,每个值都将等于1
。
如果我误解了您的问题,请纠正我。
以下代码可以通过使用defaultdict的defaultdict
from collections import defaultdict as ddict
CodonDict = {'ATT':'I', 'ATC':'I', 'ATA':'I', 'CTT':'L', 'CTC':'L'}
TripletCount = ddict(lambda:ddict(int))
for key,value in CodonDict.items():
TripletCount[value][key] += 1
TrpletCount
中的值是defaultdict,您可以通过map
之类的值将其转换为列表。