2015-07-12 53 views
0

下面的代码没有任何问题,在Python 2.7,但是在Python 3.4.3,抛出TypeError: iteration over a 0-d arraypython3字典,值列表

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

我应该怎么才能在做两到列表mylist python2.7和3.4获得相同的结果?

+0

我的猜测将是.keys()从http://blog.labix.org/2008/06/27/watch-out-for-listdictkeys-in-python-3 – darwindave

+0

谢谢。添加copy()。keys()不能解决问题。 – superMind

回答

2

问题不在于字典方法,而在于map函数,它在Python 3中更改为返回迭代器而不是列表。 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()]并得到相同的结果(因为值列表中的第一项已经是一个浮点阵列,一旦你修复如上所述的c1)。

+0

感谢您的回答。 – superMind

+0

谢谢收获。 @Blckknght quick question:是mat.append(np.array(list(map(float,np.random.rand(7)))))和mat.append(np.random.rand(7))是一样的东西吗?我的意思是可以互换使用? – superMind