Python:将带有数组的字典作为值转换为表

时间:2018-04-12 15:07:36

标签: python arrays dictionary

我有一个部分看起来像这样的文件:

{'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]

3 个答案:

答案 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