Arff Loader:AttributeError:'dict'对象没有属性'data'

Erd*_*ase 14 python attributes runtime-error arff

我正在尝试使用liac-arff库将.arff文件加载到numpy数组中.(https://github.com/renatopp/liac-arff)

这是我的代码.

import arff, numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset.data)
Run Code Online (Sandbox Code Playgroud)

执行时,我收到错误.

ArffLoader.py", line 8, in <module>
data = np.array(dataset.data)
AttributeError: 'dict' object has no attribute 'data'
Run Code Online (Sandbox Code Playgroud)

我见过类似的线程,Smartsheet Data Tracker:AttributeError:'dict'对象没有属性'append'.我是Python新手,无法解决此问题.我怎样才能解决这个问题?

The*_*Cat 19

精简版

dataset是一个dict.对于a dict,您可以使用python索引表示法访问值dataset[key],其中key可以是字符串,整数,浮点数,元组或任何其他不可变数据类型(它比这更复杂,如果您感兴趣,请在下面更多).

在您的情况下,密钥是字符串的形式.要访问它,您需要将您想要的字符串作为索引,如下所示:

import arff
import numpy as np
dataset = arff.load(open('mydataset.arff', 'rb'))
data = np.array(dataset['data'])
Run Code Online (Sandbox Code Playgroud)

(你也不应该把导入放在同一行,尽管这只是一个可读性问题)

更详细的解释

dataset是一种dict,在某些语言中被称为a maphashtable.在a中dict,您以与列表或数组中索引的方式类似的方式访问值,但"index"可以是"hashable"的任何数据类型(理想情况下,每个可能值的唯一标识符).这个"索引"被称为"密钥".在实践中,至少对于内置类型和大多数主要包,只有不可变数据类型或可清除,但是没有实际规则要求这样.

你来自MATLAB哪里?如果是这样,那么您可能正在尝试使用MATLAB's struct访问技术.您可以将a dict视为更快,更灵活struct,但访问值的语法是不同的.