Python 3.x 创建字典以统计序列ID的出现次数

Python 3.x 创建字典以统计序列ID的出现次数,python-3.x,dictionary,counting,Python 3.x,Dictionary,Counting,我正在尝试编写一个函数来计算这个文件中出现的每个序列ID的数量。这是一个示例blast文件 上面的图片是我正在处理的输入文件 def count_seq(input): dic1={} count=0 for line in input: if line.startswith('#'): continue if line.find('hits found'): line=line.split('\t')

我正在尝试编写一个函数来计算这个文件中出现的每个序列ID的数量。这是一个示例blast文件

上面的图片是我正在处理的输入文件

def count_seq(input):
    dic1={}
    count=0
    for line in input:
        if line.startswith('#'):
        continue
    if line.find('hits found'):
        line=line.split('\t')
        if line[1] in dic1:
            dic1[line]+=1
        else:
            dic1[line]=1
return dic1
上面是我的代码,调用时只返回空括号{}

所以我试图计算最后13行中的第二个元素sequence IDs出现的次数,例如:FO203510.1出现了4次


任何帮助都将不胜感激,谢谢

也许这就是你想要的:

def count_seq(input_file):
    dic1={}
    with open(input_file, "r") as f:
        for line in f:
            line = line.strip()
            if not line.startswith('#'):
                line = line.split()
                seq_id = line[1]
                if not seq_id in dic1:
                    dic1[seq_id] = 1
                else:
                    dic1[seq_id] += 1

    return dic1

print(count_seq("blast_file"))

也许这就是你想要的:

def count_seq(input_file):
    dic1={}
    with open(input_file, "r") as f:
        for line in f:
            line = line.strip()
            if not line.startswith('#'):
                line = line.split()
                seq_id = line[1]
                if not seq_id in dic1:
                    dic1[seq_id] = 1
                else:
                    dic1[seq_id] += 1

    return dic1

print(count_seq("blast_file"))

这是collections.defaultdict的合适案例。设f为文件对象。假设序列在第二列中,只需要几行代码,如图所示

from collections import defaultdict
d = defaultdict(int)
seqs = (line.split()[1] for line in f if not line.strip().startswith("#"))
for seq in seqs:
    d[seq] += 1

看看它是否有效

这是collections.defaultdict的合适案例。设f为文件对象。假设序列在第二列中,只需要几行代码,如图所示

from collections import defaultdict
d = defaultdict(int)
seqs = (line.split()[1] for line in f if not line.strip().startswith("#"))
for seq in seqs:
    d[seq] += 1

看看它是否有效

在这里,文本比图像更受欢迎。人们喜欢在你的数据上复制/粘贴和测试他们的解决方案。哦,对了,谢谢你让我知道,我没有想到这一点,也没有意识到这会是一个问题!在这里,文本比图像更受欢迎。人们喜欢在你的数据上复制/粘贴和测试他们的解决方案。哦,对了,谢谢你让我知道,我没有想到这一点,也没有意识到这会是一个问题!这就是我想做的,谢谢!我的脑子还在想着循环和字典!这就是我想做的,谢谢!我的脑子还在想着循环和字典!