5 回答
![?](http://img1.sycdn.imooc.com/533e4d660001312002000200-100-100.jpg)
TA贡献1820条经验 获得超9个赞
keys,items并且values是从字典中获取“内容”的最快方法。否则你必须迭代键。允许跳过索引和无序索引的通用方法:
In [81]: adict = {0: 0.8, 1: 0.2, 2: 0, 3: 0}
In [82]: keys = list(adict.keys())
In [83]: arr = np.zeros(max(keys)+1) # or set your own size
In [84]: arr[keys] = list(adict.values())
In [85]: arr
Out[85]: array([0.8, 0.2, 0. , 0. ])
![?](http://img1.sycdn.imooc.com/533e51f30001edf702000200-100-100.jpg)
TA贡献1811条经验 获得超4个赞
如果输入字典未排序或缺少值的解决方案:
d = {1:1.1, 2:2.2, 0: 0.8, 4:4.4}
sz = 1+max(d.keys()) # or len(d) if you are sure there are no missing values
x = np.full(sz, np.nan)
x[list(d.keys())] = list(d.values())
x
#array([0.8, 1.1, 2.2, nan, 4.4])
![?](http://img1.sycdn.imooc.com/545845b40001de9902200220-100-100.jpg)
TA贡献1810条经验 获得超4个赞
字典本质上是无序的。您需要根据键对值进行排序(假设您的字典中没有丢失的键):
a = {0: 0.8, 1: 0.2, 2: 0, 3: 0}
np.array([i[1] for i in sorted(a.items(), key=lambda x:x[0])])
另一种方法是在 numpy 中排序:
b = np.array(list(a.items()))
b[b[:,0].argsort()][:,1]
输出:
[0.8, 0.2, 0, 0]
![?](http://img1.sycdn.imooc.com/533e50ed0001cc5b02000200-100-100.jpg)
TA贡献1864条经验 获得超6个赞
上面的答案给出了 dict_values,但方向正确
正确的方法是:
d = {0: 0.8, 1: 0.2, 2: 0, 3: 0}
np_array = np.array(list(d.values()))
添加回答
举报