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

标签 python dictionary enumerate

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

相关文章:

python - 根据 df1 中的列值查找 df2 中的相交值,并在 df1 中创建一个具有检索值的新列(不匹配的列名)

python - 使用 Django Rest Framework 中的 ModelSerializer 和 ModelViewSet 返回通过 POST 创建的新项目的 id

python - 提取具有多个值的 : Python dictionary, 键

java - 如何在 Java map 中进行深度搜索?

python - 用字符串枚举列表会给出错误的结果

python - 如何使用 Python 修复 Pyx 模块中的回溯错误?

python itertools 产品慢是输出文件的写入速度的瓶颈

python - 如何使字典在类实异常(exception)部不可变但在 python 中的类实例内部可变

python - 收到 “ValueError: not enough values to unpack (expected 2, got 1)”时,如何强制程序忽略并继续?

ios - 在 Swift 中遍历多个数组