如何添加所有键的值并打印新词典?

2024-04-19 13:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件1有区域信息,像染色体1,从位置1到位置10,看起来像: 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中添加值,这取决于 在文件2中属于文件1中的任何区域,类似于: chromosome,start_position,end_position,total_value 1,1,10,value1+value2+value3 1,11,20,value4

这两个文件都可以超过1000万行,我应该通过查看file2的每一行(查看位置是否在file1的任何区域中)或将file1的每一行作为字典(然后在file2中查找值)来实现吗?然后加上?)?你知道吗

我怎样才能得到file1中每一行的“总值”? 谢谢大家!你知道吗


Tags: 文件信息区域valuepositionstartfile1file2
1条回答
网友
1楼 · 发布于 2024-04-19 13:41:17

我认为你不一定在寻找最有效的代码,而是一个能完成任务的代码?你知道吗

我将把文件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列表理解,请对此进行一些研究。这就是允许我们写一行代码来得到所有相关值之和的原因。你知道吗

相关问题 更多 >