python3 字典,值作为列表
python3 dictionary, values as a list
下面的代码在Python 2.7中没有任何问题,但是在Python 3.4.3中,抛出TypeError: iteration over a 0-d array
import numpy as np
def c1():
mat=[]
mat.append(np.array(map(float,np.random.rand(7))))
return mat
mylist=[]
mydict_={}
mydict_['dog']=c1()
mydict_['big']=c1()
justKeys={label:1 for label in list(mydict_.keys())}
for idx, word in enumerate(justKeys.keys()):
mylist.append(np.array(map(float, mydict_[word][0])))
我应该怎么做才能使 python2.7 和 3.4 中的列表 mylist
得到相同的结果?
问题不在于字典方法,而在于 map
函数,它在 Python 3 中更改为 return 迭代器而不是列表。 Numpy 无法正确处理迭代器,因此您需要添加一个 list
调用来修复问题:
def c1():
mat=[]
mat.append(np.array(list(map(float,np.random.rand(4,7)))))
return mat
您的其余代码有点令人困惑,因为您正在创建一个没有任何有用内容的新字典,然后在不使用索引的情况下枚举新字典的键。似乎您可以只使用 my_list = [x[0] for x in dict_.values()]
并获得相同的结果(因为值列表中的第一项已经是一个 numpy 浮点数组,一旦您按上述方式修复 c1
)。
下面的代码在Python 2.7中没有任何问题,但是在Python 3.4.3中,抛出TypeError: iteration over a 0-d array
import numpy as np
def c1():
mat=[]
mat.append(np.array(map(float,np.random.rand(7))))
return mat
mylist=[]
mydict_={}
mydict_['dog']=c1()
mydict_['big']=c1()
justKeys={label:1 for label in list(mydict_.keys())}
for idx, word in enumerate(justKeys.keys()):
mylist.append(np.array(map(float, mydict_[word][0])))
我应该怎么做才能使 python2.7 和 3.4 中的列表 mylist
得到相同的结果?
问题不在于字典方法,而在于 map
函数,它在 Python 3 中更改为 return 迭代器而不是列表。 Numpy 无法正确处理迭代器,因此您需要添加一个 list
调用来修复问题:
def c1():
mat=[]
mat.append(np.array(list(map(float,np.random.rand(4,7)))))
return mat
您的其余代码有点令人困惑,因为您正在创建一个没有任何有用内容的新字典,然后在不使用索引的情况下枚举新字典的键。似乎您可以只使用 my_list = [x[0] for x in dict_.values()]
并获得相同的结果(因为值列表中的第一项已经是一个 numpy 浮点数组,一旦您按上述方式修复 c1
)。