【问题标题】:python3 dictionary, values as a listpython3字典,值作为列表
【发布时间】:2015-07-12 05:41:37
【问题描述】:

以下代码在 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])))

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

【问题讨论】:

标签: python list python-2.7 dictionary python-3.4


【解决方案1】:

问题不在于字典方法,而在于 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 如上所述)。

【讨论】:

  • 感谢您的回答。
  • 感谢收获。 @Blckknght 快速问题: mat.append(np.array(list(map(float,np.random.rand(7))))) 和 mat.append(np.random.rand(7)) 是一样的吗?我的意思是可以互换使用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多