Написать вложенный defaultdict в CSV - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть вложенный defaultdict:

data_dict = 
{
    "5uz7_R": {
        "section1": {
            "=": 0,
            "-": 0,
            ".": 24,
            "+": 30,
            "|": 4,
            "gaps": 1,
            "score": 0
        },
        "section2": {
            "=": 0,
            "-": 0,
            ".": 35,
            "+": 31,
            "|": 5,
            "gaps": 1,
            "score": 0
        }
    },
    "4l6r_A": {
        "section1": {
            "=": 0,
            "-": 0,
            ".": 23,
            "+": 32,
            "|": 3,
            "gaps": 1,
            "score": 0
        },
        "section2": {
            "=": 0,
            "-": 0,
            ".": 32,
            "+": 32,
            "|": 5,
            "gaps": 3,
            "score": 0
        }
    }
}

, который я хочу записать в файл CSV (или разделенный табуляцией), который будет выглядеть следующим образом:

        section1                            section2                        
        =   -   .   +   |   gaps    score   =   -   .   +   |   gaps    score
5uz7_R  0   0   24  30  4   1       0       0   0   35  31  5   1       0
4l6r_A  0   0   23  32  3   1       0       0   0   32  32  5   3       0

CSV. DictWriter, кажется, идеально подходит для этого (пожалуйста, не предлагайте использовать pandas: D), я просто не могу понять, как сделать это правильно в данном конкретном случае.

Спасибо за помощь!

1 Ответ

0 голосов
/ 21 апреля 2020

В итоге я получил то, что хотел, с несколькими циклами for, операторами .write () и явным образом написал множество '\ t' и '\ n', но я надеялся использовать что-то менее неуклюжее, чем это:

out.write('SEP=\t'+'\n'+'\t')
for section in section_list:
    out.write(section+'\t'*(len(symbol_list)))
out.write('\n'+'\t')
for section in section_list:
    for symbol in symbol_list:
        out.write(symbol+'\t')
out.write('\n')
for pdb in pdb_list:
    out.write(pdb+'\t')
    for section in section_list:
        for symbol in symbol_list:
            out.write(str(data_dict[pdb][section][symbol])+'\t')
    out.write('\n')
...