我有一个部分看起来像这样的文件:
{'PLGLB1': array([0, 2, 2]), 'IL20RA': array([2, 0, 0]), 'MORC1': array([2, 0, 0])}...
我希望输出采用类似表格的形式:
PLGLB1 0 2 2
IL20RA 2 0 0
MORC1 2 0 0
没有任何缩进或括号。我该怎么办?
我尝试过:
for i in dict:
print("{}\t{}".format(i,dict[i]))
(这是一个大脚本的延续)但我得到了这个输出:
BAIAP3 [0 2 2]
CALCA [0 2 2]
MYT1 [2 0 0]
答案 0 :(得分:1)
使用这样的字典,以及您尝试将其放入类似结构的数据框中的事实,我会考虑使用pandas
。它很快,你可以在一个短行中得到你想要的框架(假设你的字典被称为my_dict
):
import pandas as pd
df = pd.DataFrame.from_dict(my_dict, orient='index')
返回:
0 1 2
PLGLB1 0 2 2
IL20RA 2 0 0
MORC1 2 0 0
我不确定你的最终目标,但似乎你希望这最终被输出为文本文件(如果我错了,请纠正我),在这种情况下你可以这样做:
df.to_csv('filename.txt', sep=' ', header=False)
这将使名为filname.txt
的文本文件如下所示:
PLGLB1 0 2 2
IL20RA 2 0 0
MORC1 2 0 0
注意:如果输出的.txt
是您唯一的目标,并且您不想使用Python中的数据框,您甚至可以链接整个内容而不保存框架作为df
:
pd.DataFrame.from_dict(my_dict, orient='index').to_csv('filename.txt', sep=' ', header=False)
答案 1 :(得分:0)
dictionary = {'PLGLB1': [0, 2, 2], 'IL20RA': [2, 0, 0], 'MORC1': [2, 0, 0]}
for key in dictionary:
print(key, *dictionary[key])
这听起来像是你正在寻找的东西。 print语句中的星号从列表中删除括号,并用空格分隔元素。
答案 2 :(得分:0)
我假设你的输入是一个长字符串,如问题所示。 此格式的标准解析器可能不存在。 Regular expressions救援。
import re
entry_rx = re.compile(r"'(\w+)': array\(\[(\d+), (\d+), (\d+)\]\)")
def print_group_per_line(input_string):
for match in entry_rx.finditer(crazy_text):
print("{0} {1} {2} {3}".format(*match.groups()))
测试它:
>>> crazy_text = "{'PLGLB1': array([0, 2, 2]), 'IL20RA': array([2, 0, 0]), 'MORC1': array([2, 0, 0])}"
>>> print_group_per_line(crazy_text)
PLGLB1 0 2 2
IL20RA 2 0 0
MORC1 2 0 0