如何添加所有密钥'值和打印新词典?

时间:2017-01-25 03:37:38

标签: python dictionary

我有一个文件1具有从1号位置到10号位置的染色体1等区域信息,如下所示: chromosome,start_position,end_position 1,1,10 1,11,20

file2具有每个位置的值,例如在染色体1上的位置6,具有一些值,如下所示: chromosome,position,value 1,1,value1 1,2,value2 1,6,value3 1,13,value4

我想根据位置是否将file2中的值添加到file1 在file2中属于file1中的任何区域,类似于: chromosome,start_position,end_position,total_value 1,1,10,value1+value2+value3 1,11,20,value4

两个文件都可以超过1000万行,我应该通过查看file2的每一行(查看该位置是否在file1的任何区域中),或者使file1的每一行都成为一个字典(然后找到值)在file2中?然后添加?)?

我怎样才能获得总价值' file1中的每一行? 谢谢大家!

1 个答案:

答案 0 :(得分:0)

我认为你不一定在寻找效率最高的代码,而是一个能完成工作的代码?

我会将文件2中的值读入字典,密钥为(chromosome, start)对(假设文件2中的开头和结尾始终相同)。

然后逐行读取文件1,并在“文件2”字典中查找所有相关值,将结果总和追加到行尾(可能在新文件中):

import numpy as np

for line in file1:
    chromosome, start, end = line.split(',')
    total_value = np.sum([file2_dict.get([(chromosome,str(i))], 0) for i in
                          range(int(start), int(end)+1)])
    #do something with the total value, maybe write to another file.
    #Could do:
    new_line = ','.join([chromosome, start, end, total_value]) + '\n'

我将把剩下的实现细节留给你(比如从文件2中获取字典)。它可能对内存使用量有点沉重,但希望不会太糟糕。

请注意.get()方法与字典查找的使用 - 这将确保字典中找不到的任何键都返回0。您决定这是否适用于您的情况。另请注意使用strint在文本和数字之间进行转换。您可以根据实施情况决定这是否合适。

另外,如果您之前没有遇到过Python列表推导,请对此进行一些研究。这就是允许我们编写单行以获得所有相关值的总和的原因。