我使用此代码创建了一个字典:
.box-link
此代码生成一个如下所示的字典:
.box-link:hover .box-visual {
transform: scale(1.1);
}
来自此文件:
String where = COL_DATE + " = " + 15;
String[] args = null;
我想要做的是从列表中的每个其他值中减去列表中的第一个值(在第一种情况下,第二种情况下为75和25),以获得所需的输出:
import collections
exons = collections.defaultdict(list)
with open('test_coding.txt') as f:
for line in f:
chrom, start, end, isoform = line.split()
exons[isoform].append((int(start), int(end)))
我在想我需要以另一种方式创建我的字典。有点像下面,但我不能让这个功能正常工作。
{'NM_100': [(75, 90), (100, 120)], 'NM_200': [(25, 50), (55, 75), (100, 125), (155, 200)]})
有什么建议吗?
答案 0 :(得分:2)
我的方法是保存你想要在每次迭代中减去的元素,然后使用map
函数应用它,非常基本并将结果保存在同一个字典中:
exons = {'NM_100': [(75, 90), (100, 120)], 'NM_200': [(25, 50), (55, 75), (100, 125), (155, 200)]}
for k,v in exons.items():
x = d1[k][0][0] #Saving the first element of first tuple of each list
for i,t in enumerate(v):
exons[k][i] = tuple(map(lambda s: s-x, t)) #just to conserve the original format of your exons dictionany
输出:
>>> exons
{'NM_100': [(0, 15), (25, 45)], 'NM_200': [(0, 25), (30, 50), (75, 100), (130, 175)]}
答案 1 :(得分:1)
如果您确实想要进行此转换,则在读取文件时,您可以创建另一个字典,其中包含密钥isoform
,并将值作为列表中的第一个值,然后继续从中删除。
尝试在没有单独的字典或列表的情况下执行此操作的问题是,如果对于第一行执行减法操作,那么对于读入的所有其他值,最终会减去0
,这是第一个元素的新值。或者你必须首先创建dict,然后重新遍历它以进行减法。
示例 -
import collections
exons = collections.defaultdict(list)
firstvalues = {}
with open('test_coding.txt') as f:
for line in f:
chrom, start, end, isoform = line.split()
if isoform not in firstvalues:
firstvalues[isoform] = int(start)
exons[isoform].append((int(start) - firstvalues[isoform], int(end) - firstvalues[isoform]))
答案 2 :(得分:0)
for key, value in exons.items():
s = value[0][0]
exons[key] = [(x[0] - s, x[1]) for x in value]