gpt4 book ai didi

python - 纠正字典中的值

转载 作者:行者123 更新时间:2023-11-28 16:31:51 24 4
gpt4 key购买 nike

我使用这段代码创建了一个字典:

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

来自这个文件:

chr1    75  90  NM_100
chr1 100 120 NM_100
chr2 25 50 NM_200
chr2 55 75 NM_200
chr2 100 125 NM_200
chr2 155 200 NM_200

我想要做的是从该特定列表中的每个其他值中减去列表中的第一个值(在第一种情况下,75 和 25 用于第二种情况)以获得所需的输出:

{'NM_100': [(0, 15), (25, 45)], 'NM_200': [(0, 25), (30, 50), (75, 100), (130, 175)]})

我在想我需要用另一种方式来创建我的字典。有点像下面,但我无法使此功能正常工作。

def read_exons(line):
parts = iter(line.split()) #I think the problem is here
chrom = next(parts)
start = next(parts)
end = next(parts)
base = start[0] #and here
return name, [(s-base, e-base) for s, e in zip(start, end)]

with open('testing_coding.txt') as f:
exons = dict(read_exons(line) for line in f
if not line.strip().startswith('#'))

有什么建议吗?

最佳答案

我的方法是在每次迭代时保存要减去的元素,然后使用 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)]}

关于python - 纠正字典中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31115016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com