首页 > 解决方案 > “ValuesViewHDF5”对象不可下标

问题描述

我尝试了很多解决方案,但似乎无法解决问题。这段代码在 Python 2.7 中,我使用的是 Python 3.7。在搜索时,我发现这在 Python 3.7 中出现错误。谁能帮助我如何在 Python 3.7 中删除此错误?

print('Loading c3d features ...')
        features = h5py.File(self._options['feature_data_path'], 'r') 
        self._feature_ids = features.keys()
        self._features = {video_id:np.asarray(features[video_id].values() 
        [0]) for video_id in self._feature_ids}

这是我得到的错误:

E:\jupyter book\data_provider.py in <dictcomp>(.0)

    ---> 68         self._features 
             {video_id:np.asarray(features[video_id].values()[0]) for 
             video_id in self._feature_ids}
         69 
         70 

 TypeError: 'ValuesViewHDF5' object is not subscriptable

标签: pythontensorflow

解决方案


尝试将下标移到位[0]之外np.asarray()

self._features = {video_id:np.asarray(features[video_id].values())[0] 
                 for video_id in self._feature_ids} 

或将group.values()对象转换为列表:

self._features = {video_id:np.asarray(list(features[video_id].values())[0]) 
                  for video_id in self._feature_ids}

用 Py2调用features[video_id].values()会返回一个列表;在 Py3 上,它返回一个类似集合的对象(http://docs.h5py.org/en/stable/high/group.html#Group.values)。这意味着该group.values()对象在 Py3 中不再可直接下标。您需要先通过list(group.values())或将其转换为列表或类似数组的对象np.asarray(group.values())。这同样适用于group.keys()等。


推荐阅读