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.1k
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")
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题