打印字典词典作为表

时间:2016-12-27 16:46:52

标签: python dictionary printing

简化我的问题,我的管道中有一本字典词典,我想打印成表格。

例如。这是我用这个打印的词典:

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

建议保留这种结构将不胜感激。先感谢您。

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|

答案 1 :(得分:0)

我可以做一些更好的转换" v"字符串和替换后。

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

我知道它不清晰而美丽。