How can I correct the follow error ' AttributeError: 'dict_keys' object has no attribute 'remove' '?

How can I correct the follow error ' AttributeError: 'dict_keys' object has no attribute 'remove' '?

我试图按照“https://github.com/EBjerrum/Deep-Chemometrics/blob/master/Deep_Chemometrics_with_data_augmentation.py.ipynb”的例子,但是当执行代码的第一部分时,我立即得到错误。

#code
import scipy.io as sio
import numpy as np

def get_xY(filename, maxx=600):

#sio.whosmat(filename)

matcontents = sio.loadmat(filename)
keys = matcontents.keys()
for key in list(keys):
    if key[0] == '_':
        keys.remove(key)

keys.sort()

d = {}            
for key in keys:
    data = matcontents[key][0][0]
    if key[-1] == "Y":
        Ydata = data[5]
        d[key] = Ydata
    else:
        xdata = data[5][:,:maxx]
        d[key] = xdata
        d["axisscale"]= data[7][1][0][0][:maxx].astype(np.float)

return d

filename = 'Dataset/nir_shootout_2002.mat'
dataset = get_xY(filename)

' AttributeError: 'dict_keys' 对象没有属性 'remove' '

似乎将 keys.remove(key) 更改为 del keys[key] 对他们有用。 (来自评论)


当您加载 matlab 文件和需要字典但找不到字典的代码时,您遇到了这个问题。

具体错误是'dict_keys' object has no attribute 'remove'。这就是我知道 python 没有找到字典的方式。

您的代码:

matcontents = sio.loadmat(filename)
keys = matcontents.keys()

将其更改为:

matcontents = sio.loadmat(filename)
print('matcontents',type(matcontents),matcontents)
keys = matcontents.keys()
print('keys',type(keys),keys)

确保数据按预期加载。

此页面还提到必须以不同方式导入较新版本的 matlab 文件 (7.3)。 Read .mat files in Python