我有以下代码。
# create an iterator
result = itertools.groupby(people, key=get_job)
# create copies
copy1, copy2, copy3, copy4, copy5 = itertools.tee(result, 5)
# run first copy
for key, group in copy1:
print(key, list(group))
# run second copy
for key, group in copy2:
print(key, list(group))
得到的结果是:
hacker [list here as expected]
banker [list here as expected]
trader [list here as expected]
hacker []
banker []
trader []
所以第二个迭代器失败了
我知道在 python 中,你只能对一个迭代器进行一次迭代,但复制的重点不就是 正是为了解决这个问题? 即我希望每一个拷贝都有自己的生命,并且能够迭代它,不管我是否迭代过其他的。
要么是我的代码有问题,要么是我误解了复制的目的。
经过许多小时的研究,我可以确认上面的@jasonharper是正确的--你不能像.groupby那样用itertools.tee嵌套迭代器。
相反,我在这里找到了一个可行的解决方案。Python itertools.groupby的多个值
从那里复制粘贴,省得这次看书的人。
totalResults = []
totalClasses = []
for key, location in groupby(rows, lambda k: k[0]):
location = list(location)
totalResults.append(dict(name=key, data=[x[2] for x in location]))
totalClasses.append(dict(name=key, data=[x[3] for x in location]))
在此向作者(@John La Rooy)点赞。