python 最后一列分类并统计频率的问题

前两列是位点信息,希望统计同一个位点下,第三列x有多少个,X有多少个,在python中应该用什么方法能比较快的实现呢

Chr1 1001 x

Chr1 1001 X

Chr1 1001 x

Chr1 10018 X

Chr1 1002 x

Chr1 1002 X

目前我想的是根据前两列为键,最后一列是X和x的频率为值,建立两个字典,然后分别输出成两个文件,怎么输出成一个列表类似:
chr loc x X
Chr1 1001 2 1
chr1 1002 1 1
chr1 10018 0 1

阅读 2.2k
2 个回答

可只用一个字典,以前二列为键,值为元组,第一项是X频率,第二项是x频率

if value == 'X':
    freq_dict[('chr', 'loc')][0] += 1
if value == 'x':
    freq_dict[('chr', 'loc')][1] += 1

思考了一下,好像可以通过列表解决,tlist统计所有行,mlist统计只有X的行,uniqlist统计不重复行
通过遍历uniqlist统计X行和x+X行的个数

tlist=[]
mlist=[]
uniqlist=[]
for l in  f.readlines():
        line = l.strip().split("\t")
        loc="\t".join(line[0:2])
        tlist.append(loc)
        uniqlist=list(set(tlist))
        if line[2]=="X":
                mlist.append(loc)
                for i in uniqlist:
                       out.write(i+"\t"+str(uniqlist.count(i))+"\t"+str(mlist.count(i))+"\n")
推荐问题