gpt4 book ai didi

python - 使用 enumerate 遍历列表字典以提取信息

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:27 28 4
gpt4 key购买 nike

今天早些时候,我得到了一些关于如何使用 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

最佳答案

尝试为这个问题提供一些帮助:问题的一个关键部分是我不认为 enumerate 做了你认为它做的事情。枚举只是对您正在迭代的事物进行编号。因此,当您执行 for 循环时,sd 首先为 0,然后为 1……仅此而已。在您的情况下,您想查看相邻的列表条目(看起来?),因此在 python 中更惯用的循环方式几乎没有那么干净。所以你可以这样做:

...
y = exons[name]

for index in range(len(y) - 1): # the - 1 is to prevent going out of bounds
first_max = max(y[index])
second_min = min(y[index+1])
... # do more stuff, I didn't completely follow what you're trying to do

我会为铁杆 pythonistas 添加,您当然可以做一些聪明的事情来更地道地编写它并避免我编写的 C 样式循环,但我认为进入 zip 等等可能会让刚接触 python 的人。

关于python - 使用 enumerate 遍历列表字典以提取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944522/

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