问题描述
我想解析具有以下格式的HDF文件
HDFFile/
Group1/Subgroup1/DataNDArray
...
/SubgroupN/DataNDArray
...
GroupM/Subgroup1/DataNDArray
...
/SubgroupN/DataNDArray
我正在尝试使用itertools.product,但在第二个迭代器MWE上使用的卡住了:
from itertools import *
import h5py
hfilename = 'data.hdf'
with h5py.File(hfilename, 'r') as hfile:
for group, subgroup, dim in product(hfile.itervalues(), ????, range(10));
parse(group, subgroup, dim)
显然,我的问题是第二个迭代器将依赖于第一个迭代器的提取值,而后者不能在同一个衬套中使用。
我知道可以使用for循环或以下示例进行操作:
with h5py.File(hfilename, 'r') as hfile:
for group in hfile.itervalues():
for subgroup, dim in product(group.itervalues(), range(10)):
parse(group, subgroup, dim)
但我想知道是否有一种方法可以在一次itertools运行中做到这一点。
1楼
第二个迭代器是否依赖于第一个迭代器的提取值?
从您的示例来看,似乎每个组中都有N
个子组。
具有列表推导和()
生成器(而不是product
)的解决方案如下所示:
M = 3
N = 2
a = ['Group' + str(m) for m in range(1, M + 1)]
b = ['Subgroup' + str(n) for n in range(1, N + 1)]
c = ('{}/{}/DataNDArray'.format(ai, bi) for ai in a for bi in b)
for key in c:
print(key)
并打印:
Group1/Subgroup1/DataNDArray
Group1/Subgroup2/DataNDArray
Group2/Subgroup1/DataNDArray
Group2/Subgroup2/DataNDArray
Group3/Subgroup1/DataNDArray
Group3/Subgroup2/DataNDArray
这应该是您想要的。