在Python中将不同长度的列表字典写入csv

0 投票
1 回答
1371 浏览
提问于 2025-04-18 14:39

我现在在处理包含列表的字典时遇到了一些困难。

给我一个这样的字典:

GO_list = {'Seq_A': ['GO:1234', 'GO:2345', 'GO:3456'],
   'Seq_B': ['GO:7777', 'GO:8888']}  

我想把这个字典写入一个csv文件,格式如下:

编辑 我添加了整个函数以提供更多信息

def map_GI2GO(gilist, mapped, gi_to_go):
with open(gilist) as infile:
    read_gi = csv.reader(infile)
    GI_list = {rows[0]:rows[1] for rows in read_gi} # read GI list into dictionary
    GO_list = defaultdict(list) # set up GO list as empty dictionary of lists
    infile.close()
with open(gi_to_go) as mapping:
    read_go = csv.reader(mapping, delimiter=',')         
    for k, v in GI_list.items(): # iterate over GI list and mapping file
        for row in read_go:
            if len(set(row[0]).intersection(v)) > 0 :
                GO_list[k].append(row[1]) # write found GOs into dictionary
                break
    mapping.close()
with open(mapped, 'wb') as outfile: # save mapped SeqIDs plus GOs
    looked_up_go = csv.writer(outfile, delimiter='\t', quoting=csv.QUOTE_MINIMAL)
    for key, val in GO_list.iteritems():
        looked_up_go.writerow([key] + val)
    outfile.close()

但是这样输出的结果是:

Seq_A,GO:1234;GO2345;GO:3456
Seq_B,GO:7777;GO:8888

我希望把列表中的每个条目放在不同的列中,
用一个定义好的分隔符来分开。我很难去掉
那些显然是分隔列表条目的分号(;)。

欢迎任何想法

1 个回答

1

如果我是你,我会试试 itertools 里的 izip_longest,这个可以用来对齐长度不一样的列...

from csv import writer
from itertools import izip_longest

GO_list = {'Seq_A': ['GO:1234', 'GO:2345', 'GO:3456'],
'Seq_B': ['GO:7777', 'GO:8888']}

with open("test.csv","wb") as csvfile:
    wr = writer(csvfile)
    wr.writerow(GO_list.keys())#writes title row
    for each in izip_longest(*GO_list.values()): wr.writerow(each)

撰写回答