gpt4 book ai didi

python - 使用字典附加多个文件并删除重复项

转载 作者:行者123 更新时间:2023-11-28 19:57:27 24 4
gpt4 key购买 nike

所以我有一些文件看起来像:

snpID  Gene
rs1 ABC1
rs2 ABC1
rs3 ABC25
rs4 PT4
rs5 MTND24

在不同的文件中会有其他 snpID 和 Gene 对,但对于给定的 snpID 可能有重复但相关的相应“基因”可能不同。例如:

snpID  Gene
rs100 URX1
rs95 KL4
rs1 ABC1
rs2 ABC1-MHT5
rs3 ABC25
rs4 PT4-FIL42

我想做的是追加文件的所有内容并删除重复项(如果它们具有相同的 snpID 和基因对)。而如果 snpID 的相应基因不同,则它必须进入同一行对于上面的示例,它应该如下所示:

snpID  Gene
rs1 ABC1
rs2 ABC1, ABC1-MHT5
rs3 ABC25
rs4 PT4, PT4-FIL42
rs5 MTND2
rs100 URX1
rs95 KL4

我认为我可以通过创建字典来实现这一目标。

import glob
file_list = glob.glob('annotations.*')
dict_snps_genes = {}
for filename in file_list:
with open(filename) as fileA:
for line in fileA:
col0 = line.split()[0]
col1 = line.split()[1]
dict_snps_genes[col0] = col1

unique_dict_snps = {}
for key,value in dict_snps_genes:
if key not in unique_dict_snps.keys():
unique_dict_snps_genes[key] = value

我在进一步移动之前对此进行了测试,这给了我一个错误,如:

ValueError: too many values to unpack

PS:每个文件大约有8000个snpId-Gene pair,而且有5个以上的文件

关于如何克服这个问题的想法!!

最佳答案

您正在遍历键,但试图将它们分配给键和值变量:

for key,value in dict_snps_genes:

将其更改为遍历 .items():

for key,value in dict_snps_genes.items():

或者更好的是,如果在 Python 2.x 上,使用 `.iteritems():

for key,value in dict_snps_genes.iteritems():

请注意,您读取文件的方式只会存储任何给定 snpID 的最后读取基因;如果您找到该 ID 的另一个条目,您将覆盖前一个条目。

就我个人而言,我会将 collections.defaultdict()set 默认值一起使用:

import glob
import collections

file_list = glob.glob('annotations.*')
snps_genes = collections.defaultdict(set)
for filename in file_list:
with open(filename) as fileA:
for line in fileA:
snpid, gene = line.strip().split(None, 1)
snps_genes[snpid].add(gene)

现在 snps_genes 中的值是一组基因,每个都是唯一的。请注意,我在空格 (.split(None, 1)) 上将您的行分成两部分,这样如果基因值中有任何空格,它将按如下方式存储:

>>> 'id gene with whitespace'.split(None, 1)
['id', 'gene with whitespace']

通过使用 `snpid, gene' 作为左手赋值表达式,Python 获取拆分的结果并将每个部分分配给一个单独的变量;这里有一个方便的技巧来节省一行代码。

要将其输出到新文件,只需循环生成的 snps_genes 结构。这是对所有内容进行排序的方法:

for id in sorted(snps_genes):
print id, ', '.join(sorted(snps_genes[id]))

关于python - 使用字典附加多个文件并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14124047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com