2016-04-26 12 views
-1

リストのdictをtsvファイルに書きたいと思います。問題は私がを転記することができないということです。リスト。リストのdictとcsvへの書き込み

I持つリストの次のdict:

印刷D

defaultdict(<type 'list'>, {1: ['Genemark1.10973_g', 'missense_variant', 'MODERATE', 'scaffold_100', 305, '605', 'Asp', 'Gly', 'YES', 'NO', 'NO', 'NO'], 2: ['estExt_Genewise1Plus.C_1000001', 'disruptive_inframe_insertion', 'MODERATE', 'scaffold_100', 5002, '7172', 'Gly', '', 'YES', 'NO', 'NO', 'NO'], 3: ['fgenesh2_pm.100_#_3', 'inframe_insertion', 'MODERATE', 'scaffold_100', 10104, '265266', 'Leu', '', 'YES', 'NO', 'NO', 'NO'], 4: ['estExt_fgenesh2_pg.C_100178', 'inframe_deletion', 'MODERATE', 'scaffold_10', 711411, '351352', 'Gln', '', 'YES', 'NO', 'NO', 'NO'], 5: ['estExt_fgenesh2_pm.C_1060001', 'disruptive_inframe_deletion', 'MODERATE', 'scaffold_106', 5189, '832', 'Leu', 'del', 'YES', 'NO', 'NO', 'NO'], 6: ['Genemark1.10980_g', 'frameshift_variant', 'HIGH', 'scaffold_101', 10838, '313', 'Leu', 'fs', 'NO', 'YES', 'NO', 'NO'], 7: ['Genemark1.10973_g', 'missense_variant', 'MODERATE', 'scaffold_100', 2043, '26', 'Ile', 'Leu', 'YES', 'NO', 'NO', 'NO'], 8: ['fgenesh2_pm.104_#_2', 'stop_gained', 'HIGH', 'scaffold_104', 8574, '310', 'Tyr', '*', 'YES', 'NO', 'NO', 'NO']}) 

これは私の関数である:

from itertools import izip_longest 
    def printAnn(d): 
     rows = izip_longest(*d.values()) 
     w = csv.writer(sys.stdout, delimiter='\t', quoting=csv.QUOTE_NONE, lineterminator='\n') 
     w.writerows(rows) 

私は取得しています出力:

Genemark1.10973_g estExt_Genewise1Plus.C_1000001 fgenesh2_pm.100_#_3 estExt_fgenesh2_pg.C_100178 estExt_fgenesh2_pm.C_1060001 Genemark1.10980_g Genemark1.10973_g fgenesh2_pm.104_#_2 
missense_variant disruptive_inframe_insertion inframe_insertion inframe_deletion disruptive_inframe_deletion frameshift_variant missense_variant stop_gained 
MODERATE MODERATE MODERATE MODERATE MODERATE HIGH MODERATE HIGH 
scaffold_100 scaffold_100 scaffold_100 scaffold_10 scaffold_106 scaffold_101 scaffold_100 scaffold_104 
305 5002 10104 711411 5189 10838 2043 8574 
605 7172 265266 351352 832 313 26 310 
Asp Gly Leu Gln Leu Leu Ile Tyr 
Gly    del fs Leu * 
YES YES YES YES YES NO YES YES 
NO NO NO NO NO YES NO NO 
NO NO NO NO NO NO NO NO 
NO NO NO NO NO NO NO NO 

PS:私はizip_longestを1つのリスト(リストのdictではない)で試してみました。うまくいきました。私は何が欠けているのですか?

+0

あなたは何を期待していますか? –

+0

あなたの期待される出力は?あなたはあなたのcsvの行として各リストをしたいですか? – BHawk

+0

私が欲しいのは、各リストの最初の要素は最初の列を占め、2番目の要素は2番目の列を...最後にはリストと同じ行数のテーブルと、最大のリストですから、基本的には私が得ている出力の転置です。物事を明確にするために期待される成果を準備しています。 – cucurbit

答えて

2

お客様のご要望には、zipは不要です。それについて考える。行の各要素をその列に表示する必要があります。行をそのまま維持するのと同じです。

def printAnn(d): 
    w = csv.writer(sys.stdout, delimiter='\t', quoting=csv.QUOTE_NONE, lineterminator='\n') 
    w.writerows(d.values()) 

printAnn(d) 
Genemark1.10973_g  missense_variant  MODERATE  scaffold_100 305  605  Asp  Gly  YES  NO  NO  NO 
estExt_Genewise1Plus.C_1000001 disruptive_inframe_insertion MODERATE scaffold_100 5002 7172 Gly    YES  NO  NO  NO 
fgenesh2_pm.100_#_3  inframe_insertion  MODERATE  scaffold_100 10104 265266 Leu    YES  NO  NO  NO 
estExt_fgenesh2_pg.C_100178  inframe_deletion  MODERATE  scaffold_10  711411 351352 Gln    YES  NO  NO  NO 
estExt_fgenesh2_pm.C_1060001 disruptive_inframe_deletion  MODERATE scaffold_106 5189 832  Leu  del  YES  NO  NO  NO 
Genemark1.10980_g  frameshift_variant  HIGH scaffold_101 10838 313  Leu  fs  NO  YES  NO  NO 
Genemark1.10973_g  missense_variant  MODERATE  scaffold_100 2043 26  Ile  Leu  YES  NO  NO  NO 
fgenesh2_pm.104_#_2  stop_gained  HIGH scaffold_104 8574 310 Tyr  *  YES  NO  NO  NO 

これが欲しいものではない場合は、ご意見ください。

+0

OMG。私はその反対を考えた。あまりにも多くの時間が働いています。ありがとう、あなたの時間を無駄にしてごめんなさい。 – cucurbit

+0

@cucurbitは変態しません。間違っても大丈夫です。それは命令的なコードを書くために不可欠です。 :) –

関連する問題