简化我的问题,我的管道中有一本字典词典,我想打印成表格。
例如。这是我用这个打印的词典:
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
建议保留这种结构将不胜感激。先感谢您。
答案 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("'}]", "")
我知道它不清晰而美丽。