从numpy数组创建字典" ValueError:太多的值要解压缩"

时间:2012-07-03 17:54:26

标签: numpy

我正在尝试从一个相对较大的numpy数组创建一个字典。我尝试使用字典构造函数如下:

elements =dict((k,v) for (a[:,0] , a[:,-1]) in myarray)

我假设我这样做不正确,因为我收到错误:"ValueError: too many values to unpack"

numPy数组如下所示:

[  2.01206281e+13  -8.42110000e+04  -8.42110000e+04 ...,   0.00000000e+00
    3.30000000e+02  -3.90343147e-03]

我希望第一列2.01206281e+13成为键,最后一列-3.90343147e-03成为数组中每行的值

我是否在正确的轨道上/有更好的方法来做这件事吗?

由于

编辑:让我更清楚一点,我希望第一列成为键,最后一列成为值。我想为numpy数组中的每一行

执行此操作

2 个答案:

答案 0 :(得分:2)

如果不知道究竟什么是myarray,这是一个难以回答的问题,但这可能会帮助你开始。

>>> import numpy as np
>>> a = np.random.randint(0, 10, size=(3, 2))
>>> a
array([[1, 6],
       [9, 3],
       [2, 8]])
>>> dict(a)
{1: 6, 2: 8, 9: 3}

>>> a = np.random.randint(0, 10, size=(3, 5))
>>> a
array([[9, 7, 4, 4, 6],
       [8, 9, 1, 6, 5],
       [7, 5, 3, 4, 7]])
>>> dict(a[:, [0, -1]])
{7: 7, 8: 5, 9: 6}

答案 1 :(得分:0)

elements = dict( zip( * [ iter( myarray ) ] * 2 ) )

我们在这里看到的是我们基于myarray列表创建了一个迭代器。我们把它放在一个列表中并加倍。现在我们有一个相同的迭代器绑定到列表中的第一个和第二个位置,我们将它作为zip函数的参数提供,它为dict创建者创建一对对列表。