将python中的字典词典转换为python中的numpy数组

时间:2019-01-06 21:45:37

标签: python numpy

我在python中有一个字典字典,如下例:

示例:

result = {
    1: {'A': 11472, 'C': 8405, 'T': 11428, 'G': 6613}, 
    2: {'A': 11678, 'C': 9388, 'T': 10262, 'G': 6590}, 
    3: {'A': 2945, 'C': 25843, 'T': 6980, 'G': 2150}, 
    4: {'A': 1149, 'C': 24552, 'T': 7000, 'G': 5217}, 
    5: {'A': 27373, 'C': 3166, 'T': 4494, 'G': 2885}, 
    6: {'A': 19300, 'C': 4252, 'T': 7510, 'G': 6856}, 
    7: {'A': 17744, 'C': 5390, 'T': 7472, 'G': 7312}
}

,我想使用内部字典的值在python中创建一个numpy数组。实际上,在示例中,有7个内部字典包含4个项目,因此,在array中,将有7个内部列表包含4个项目。因此,numpy数组中的每个项目都是内部字典中的值之一。 例如,这是第一本内部字典:

{'A': 11472, 'C': 8405, 'T': 11428, 'G': 6613}

,这将是numpy数组中的第一个列表:

[ 11472,  8405,  11428,  6613]

我正在尝试使用以下行在python中执行此操作,但它不会返回预期的输出。

import pandas as pd
df = pandas.DataFrame(result, index=[0])

您知道如何解决吗?

这是预期的输出:

array([[ 11472,  8405,  11428,  6613],
       [ 11678,  9388,  10262 ,  6590],
       [ 2945,  25843,  6980 ,  2150],
       [ 1149,  24552,  7000 ,  5217],
       [ 27373,  3166,  4494 ,  2885],
       [ 19300,  4252,  7510,  6856],
       [ 17744,  5390,  7472,  7312]])

2 个答案:

答案 0 :(得分:1)

需要Python3。此外,必须按ACTG顺序插入值。

>>> np.array([list(val.values()) for val in result.values()])
array([[11472,  8405, 11428,  6613],
       [11678,  9388, 10262,  6590],
       [ 2945, 25843,  6980,  2150],
       [ 1149, 24552,  7000,  5217],
       [27373,  3166,  4494,  2885],
       [19300,  4252,  7510,  6856],
       [17744,  5390,  7472,  7312]])

答案 1 :(得分:0)

一些理解可以做到:

代码:

git check-ignore -v <pathname>

测试代码:

data = [[result[idx][k] for k in 'ACTG']
        for idx in sorted(result)
        ]

an_array = np.array(data)

结果:

result = {1: {'A': 11472, 'C': 8405, 'T': 11428, 'G': 6613},
          2: {'A': 11678, 'C': 9388, 'T': 10262, 'G': 6590},
          3: {'A': 2945, 'C': 25843, 'T': 6980, 'G': 2150},
          4: {'A': 1149, 'C': 24552, 'T': 7000, 'G': 5217},
          5: {'A': 27373, 'C': 3166, 'T': 4494, 'G': 2885},
          6: {'A': 19300, 'C': 4252, 'T': 7510, 'G': 6856},
          7: {'A': 17744, 'C': 5390, 'T': 7472, 'G': 7312}}

data = [[result[idx][k] for k in 'ACTG']
        for idx in sorted(result)
        ]

print(data)