我有一组50个文本文件,都设置了一个第一排header,第一列是基因名称,其余列是每个基因的值。我也有一个官方的基因list文本文件。我想使用官方基因名list建立一个字典,然后遍历文件,确定每行的基因名称在字典相匹配的基因名称,如果是的话,追加来自附加价值的字典值实验文件。

所以实验文件看起来像这样:

GENE    Exp1    Exp2
geneA   12      34
geneB   42      10
geneC   42      10

官方基因list看起来是这样的:

GENE    
geneA   
geneC

我已经使用defaultdict和下面的代码尝试(只是一个实验性的文件,但以后可以在更多的迭代):

combo = {}

with open('official_gene_list.txt', 'r') as f:
    f.readline()
    for line in f:
        name = line.split('\n')[0]
        combo[name]={}

with open('expeirmenta1_file.txt', 'r') as g:
for each in g:
    name2 = each.split('\t')[0]
    data = each.rstrip('\n').split('\t')[1:]
    for name2 in combo:
        combo[name2].append(data)

但每当我做到这一点,该词典是由精细,但我得到了以下错误:

AttributeError: 'dict' object has no attribute 'append'

我已经使用defaultdict()也试过:

from collections import defaultdict
combo = defaultdict(list)
with open('gene_orf_updated2.txt', 'r') as f:
    f.readline()
    for line in f:
        name = line.split('\n')[0]
        combo[name]={}
with open('GSE139_meanCenter_results.txt', 'r') as g:
    for each in g:
        name2 = each.split('\t')[0]
        data = each.rstrip('\n').split('\t')[1:]
        for name2 in combo:
            combo[name2].append(data)

而我得到“字典”对象有没有属性“追加”同样的错误。

我以前做了字典,但从未尝试过新的价值附加到这样的现有密钥。这可能吗?任何帮助或建议将不胜感激。

分析解答

你靠近做到这样。

combo = {}

with open('gene_orf_updated2.txt', 'r') as f:
    for line in f:
        name = line.split('\n')[0]
        combo[name]= []
with open('GSE139_meanCenter_results.txt', 'r') as g:
    for each in g:
        name2 = each.split('\t')[0]
        data = each.rstrip('\n').split('\t')[1:]
        if name2 in combo:
            combo[name2].append(data)

如果你想删除nested list做到这一点,而不是。

combo[name2] += data