【问题标题】:Combine values from 2 dicts into a np.array python将来自 2 个字典的值组合成一个 np.array python
【发布时间】:2016-11-18 10:16:39
【问题描述】:

我有两个字典

a = {0:[1,2,3,4], 1:[5,6,7,8],...}
b = {0:[4,3,2,1], 1:[8,7,6,5],...}

我想为每个键值对创建一个np.array c,如下所示

c1 = array([[1,4],[2,3],[3,2],[4,1]])
c2 = array([[5,8],[6,7],[7,6],[8,5]])

我该怎么做?是否可以将 np.array 存储在 python 字典中,以便我可以创建单个字典 c 而不是多个数组

【问题讨论】:

    标签: python arrays numpy dictionary


    【解决方案1】:

    是的,您可以将 np.array 放入 Python 字典中。只需将dict comprehensionzip 一起使用来自ab 的列表。

    >>> a = {0:[1,2,3,4], 1:[5,6,7,8]}
    >>> b = {0:[4,3,2,1], 1:[8,7,6,5]}
    >>> c = {i: np.array(list(zip(a[i], b[i]))) for i in set(a) & set(b)}
    >>> c
    {0: array([[1, 4], [2, 3], [3, 2], [4, 1]]),
     1: array([[5, 8], [6, 7], [7, 6], [8, 5]])}
    

    【讨论】:

    • 哇。太感谢了。优雅地工作
    【解决方案2】:

    您还可以将column_stack 与列表理解一起使用:

    import numpy as np
    
    [np.column_stack((a[k], b[k])) for k in b.keys()]
    
    Out[30]:
    [array([[1, 4],
            [2, 3],
            [3, 2],
            [4, 1]]), array([[5, 8],
            [6, 7],
            [7, 6],
            [8, 5]])]
    

    【讨论】:

    • 这种方法几乎比使用字典快两倍。非常感谢
    • 不客气!当然是因为我转了zip(但你可以使用izip from itertools
    • b.keys() 是否保证键按排序(或任何特定)顺序出现?
    • @ColonelBeauvel 这不是问题,而是结果数组是否有可能以[c2, c1] 而不是[c1, c2] 结束。使用具有 100 个键的 dict 是从 1 到 1000 的随机数,keys() 似乎以随机顺序返回键(Python 2 和 3)。
    猜你喜欢
    • 2020-10-20
    • 2020-07-29
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多