2016-12-27 5 views
1

私の問題を単純化すると、私はパイプラインにテーブルとして印刷したい辞書があります。辞書をテーブルとして表示

たとえば、これは、これを使用して印刷された私の辞書です:

for k, v in dict.items(): 
     if len(v) >= float(2): 
       print k , v 

NODE_2908 [{'NODE_2908_1': 'gi|497712399|'}, {'NODE_2908_2': 'gi|817665741|'}] 
NODE_334 [{'NODE_334_2': 'gi|639993929|'}, {'NODE_334_3': 'gi|652409655|'}] 
NODE_246 [{'NODE_246_1': 'gi|754171522|'}, {'NODE_246_2': 'gi|658510970|'}] 

値を持つ単純なテキストファイルです。 しかし、私が望むのは、 "v"を特殊文字 "(、 '、[、)、{"、 "\ t"で区切って表記しないでください。このよう :

for k, v in dict.items(): 
     if len(v) >= float(2): 
       print k + '\t' + str(('\t').join(sorted(v))) 

ポップアップエラー:この構造を温存

print k + '\t' + str(('\t').join(sorted(v))) 
TypeError: sequence item 0: expected string, dict found 

提案が理解されるであろう

NODE_2908 NODE_2908_1: gi|497712399 NODE_2908_2: gi|817665741| 
NODE_334 NODE_334_2: gi|639993929| NODE_334_3: gi|652409655| 
NODE_246 NODE_246_1: gi|754171522| NODE_246_2: gi|658510970| 

は、私がどんな成功を収めてこれを試してみました。前もって感謝します。

+1

これは何: 'lenの場合( v)> = float(2) 'すべてについて? –

+0

これは、2つ以上の値を持つキーだけを印刷するためにこれを含んでいます。 –

+0

はい、明らかに、なぜ 'float'を使うのですか? –

答えて

1

これは一種の厄介ですが、それが動作するはずです:

from itertools import chain 
for k, v in d.items(): 
    if len(v) >= 2: 
     print("\t".join(chain([k], *(item for dd in v for item in dd.items())))) 

結果:

NODE_2908 NODE_2908_1 gi|497712399| NODE_2908_2 gi|817665741| 
NODE_246 NODE_246_1 gi|754171522| NODE_246_2 gi|658510970| 
NODE_334 NODE_334_2 gi|639993929| NODE_334_3 gi|652409655| 

または、おそらくitertoolsなし:

In [25]: for k, v in d.items(): 
    ...:  if len(v) >= 2: 
    ...:   print(k + '\t' + "\t".join(s for dd in v for t in dd.items() for s in t)) 
    ...:   
    ...:   
NODE_2908 NODE_2908_1 gi|497712399| NODE_2908_2 gi|817665741| 
NODE_246 NODE_246_1 gi|754171522| NODE_246_2 gi|658510970| 
NODE_334 NODE_334_2 gi|639993929| NODE_334_3 gi|652409655| 
+0

それは働いた(itertoolsなしで)。ありがとうございました。 –

0

"v"を文字列に変換して置き換えることができます。

for k, v in dict_blast.items(): 
     if len(v) >= float(2): 
       print k + '\t' + str(v).replace("[{'", "").replace("': '", ": ").replace("'}, {'" , "\t").replace("'}]", "") 

私はそれがはっきりしていないと美しいことを知っています。

関連する問題