python - “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
解决方案
尝试将下标移到位[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()
等。
推荐阅读
- c# - 在 WebApplicationFactory 的配置源中关闭 `ReloadOnChange`
- django - 使用 DjangoFilterConnectionField 时有什么方法可以删除边和节点?
- python-3.x - 是否有可以在 Windows Python 中处理 LIDAR 数据的库?
- debugging - 使用调试标志编译 gcc
- python - 如何通过在 Python 中使用 Unittest 断言整数在范围内?
- jakarta-ee - 针对 Liberty Arquillian Remote 运行测试时身份验证失败
- regex - 正则表达式:标签之间多次匹配
- python - 如何使用熊猫填充与原始数据的子字符串一致的新列单元格的一些数据?
- regex - 正则表达式 Excel 删除字符串的中间部分
- android - 我应该在 Android FCM 的防火墙中将哪个域或 IP 列入白名单?