2016-12-27 111 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」。 像這樣:

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| 

我試圖與任何成功:

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 

建議節約這種結構可以理解的。先謝謝你。

+1

這是什麼:'如果len( v)> = float(2)'all about? –

+0

我將它包括在內只能打印超過2個值的鍵。 –

+0

是的,顯然,但爲什麼使用'浮動'? –

回答

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("'}]", "") 

我知道它並不清楚和美麗。