【发布时间】:2015-06-19 18:01:02
【问题描述】:
今天早些时候我得到了一些关于如何使用enumerate() 从字典中获取位置信息的帮助。我会尽快提供代码。然而,既然我已经找到了这个很酷的工具,我想以不同的方式实现它,以便从我的字典中获取更多信息。
我有一本字典:
length = {'A': [(0,21), (30,41), (70,80), (95,200)] 'B': [(0,42), (70,80)]..etc}
还有一个文件:
A 73
B 15
etc
我现在要做的是找出列表中第一个元素的最大值与第二个元素的最小值的差异。例如,21 和 30 的差值。然后我想将所有这些差值相加,直到找到与我的文件中的数字匹配的数字对(范围)(如果有意义的话)。
这是我一直在处理的代码:
import csv
with open('Exome_agg_cons_snps_pct_RefSeq_HGMD_reinitialized.txt') as f:
reader = csv.DictReader(f,delimiter="\t")
for row in reader:
snppos = row['snp_rein']
name = row['isoform']
snpos = int(snppos)
if name in exons:
y = exons[name]
for sd, i in enumerate(exons[name]):
while not snpos<=max(i):
intron = min(i+1) - max(i) #this doesn't work unfortunately. It says I can't add 1 to i
totalintron = 0 + intron
if snpos<=max(i):
exonmin = min(i)
exonnumber = sd+1
print exonnumber,name,totalintron
break
我认为是 sd(索引器)让我感到困惑。我不知道如何在这种情况下使用它。注释掉的部分是我尝试过但未能成功的其他途径。有什么帮助吗?我知道这是一个令人困惑的问题,我的代码可能有点混乱,但那是因为我什至无法获得输出来纠正我的其他错误。
根据提供的文件,我希望我的输出如下所示:
exon name introntotal
3 A 38
1 B 0
【问题讨论】:
-
我想在 python 上做得更好。我应该只阅读在线发布的手册吗?我觉得我太挣扎了。
-
是的,您确实应该阅读手册(official Python tutorial)。
-
我建议您将问题简化为特定的代码示例,并将该代码与示例输入一起发布到此处;输出和期望的输出。
标签: python dictionary enumerate