是否可以使用Python3在h5py中切片键,而不形成列表?

是否可以使用Python3在h5py中切片键,而不形成列表?,python,python-3.x,h5py,Python,Python 3.x,H5py,我使用h5py从HDF5文件中读取数据,发现使用python2工作的代码在使用python3时不工作。该文件的格式使二维数据帧作为不同的数据集显示,我希望将其读入三维数组。文件结构如下所示: file.h5 |- groupname (group) |- frame1 (dataset) |- frame2 (dataset) ... import h5py fid = h5py.File('file.h5', 'r') datagroup = fid['grou

我使用h5py从HDF5文件中读取数据,发现使用python2工作的代码在使用python3时不工作。该文件的格式使二维数据帧作为不同的数据集显示,我希望将其读入三维数组。文件结构如下所示:

file.h5
 |- groupname (group)
     |- frame1 (dataset)
     |- frame2 (dataset)
   ...
import h5py

fid = h5py.File('file.h5', 'r')
datagroup = fid['groupname']
dataset0 = datagroup[datagroup.keys()[0]]
要将帧读入3D数组,我必须访问第一个数据集以获取其形状和类型信息。因为我不知道每个帧的确切名称,所以我用来访问第一帧的代码如下所示:

file.h5
 |- groupname (group)
     |- frame1 (dataset)
     |- frame2 (dataset)
   ...
import h5py

fid = h5py.File('file.h5', 'r')
datagroup = fid['groupname']
dataset0 = datagroup[datagroup.keys()[0]]
然而,h5py的专家说

使用Python 3中的h5py时,keys()、values()和items()方法将返回类似视图的对象,而不是列表

视图对象支持迭代,但不支持切片。因此,为了避免出现错误,我必须将该行更改为以下内容:

dataset0 = datagroup[ [k for k in datagroup.keys()][0] ]
dataset0 = datagroup[next(iter(datagroup))]

它人工构造一个临时列表,然后获取其第一个元素。对我来说这看起来很糟糕。有更好的方法吗?

Group
支持返回迭代器,但不能直接执行。这导致以下情况:

dataset0 = datagroup[ [k for k in datagroup.keys()][0] ]
dataset0 = datagroup[next(iter(datagroup))]

内部实现肯定有些不同,因为如果我这样做,我会得到
TypeError:'KeyView'对象不是迭代器
。。。这很奇怪,因为文档明确地说类似视图的对象“支持迭代”。嗯。还有其他想法吗?试着省略
keys()
方法调用,因为迭代
组应该会产生名称。我今天刚关闭了相关的计算机,但我明天会尝试一下,谢谢。不,没有骰子-
下一步(数据组)
导致另一个
类型错误:“组”对象不是迭代器
。好的,尝试下一步(iter(datagroup))
然后。稍微好一点:
datagroup[list(datagroup.keys())][0]