【问题标题】:converting dictionary of dictionaries in python into numpy array in python [duplicate]将python中的字典字典转换为python中的numpy数组[重复]
【发布时间】:2019-01-06 21:45:37
【问题描述】:

我在 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]])

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    需要 Python 3。此外,值必须以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]])
    

    【讨论】:

    • 在 python 2.7 中也可以。
    • 字典在 python 2.7 中没有顺序
    • @StephenRauch 字典在 Python 3.7 之前也没有订购。
    • @Tomothy32,非常正确,除了 CPython 在其他方面有所进步...... :-)
    • @StephenRauch 确实如此,除了在 3.6 中它被认为是“实现细节,不应依赖”。
    【解决方案2】:

    几个推导式可以做到这一点:

    代码:

    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)
    

    结果:

    [[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]]
    

    【讨论】:

    • 谢谢。这个返回一个列表列表。但我想要一个 numpy 数组。你知道怎么做吗?
    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2021-05-15
    • 2021-12-16
    • 2020-09-21
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多