3

次のようなファイルがあります。

732772  scaffold-3  G   G   A
732772  scaffold-2  G   G   A
742825  scaffold-3  A   A   G
776546  scaffold-3  G   A   G
776546  scaffold-6  G   A   G

列 2 をキーとして使用し、次のような方法で出力することに興味があります。一意のキーを持ち、それに値を関連付けます。

つまり、列 2 の名前が複数回出現する場合は、1 回だけ出力するため、出力は次のようになります。

scaffold-3
732772   G  G   A
742825   A  A   G
776546   G  A   G
scaffold-2
732772   G  G   A
scaffold-6
776546   G  A   G

私は次のように書いた:

res = open('00test','r')
out = open('00testresult','w')

d = {}
for line in res:
    if not line.startswith('#'):
        line = line.strip().split()
        pos = line[0]
        name = line[1]
        call = line[2]
        father = line[3]
        mother = line[4]

        if not (name in d):
            d[name] = []
        d[name].append({'pos':pos,'call':call,'father':father,'mother':mother})

しかし、上記の方法で出力する方法がわかりません。

どんな助けでもいいでしょう

編集:

これは問題を解決した完全に機能するコードです。

res = open('00test','r')
out = open('00testresult','w')

d = {}
for line in res:
    if not line.startswith('#'):
        line = line.strip().split()
        pos = line[0]
        name = line[1]
        call = line[2]
        father = line[3]
        mother = line[4]

        if not (name in d):
            d[name] = []
        d[name].append({'pos':pos,'call':call,'father':father,'mother':mother})

for k,v in d.items():
    out.write(str(k)+'\n')
    for i in v:
        out.write(str(i['pos'])+'\t'+str(i['call'])+'\t'+str(i['father'])+'\t'+str(i['mother'])+'\n')

out.close()
4

1 に答える 1