存储多份DataLoader的可变长度字典如何实现同步遍历?
解决方案
直接使用Python的可变参数解包语法对字典的values()方法返回结果做解包,传入zip即可适配任意长度的字典:
for index, data in enumerate(zip(*d.values())): # 此处编写你的业务逻辑即可 pass
原理解释
d.values()会直接取出字典中存储的所有DataLoader对象,无需手动指定下标适配固定长度的字典- 前缀的
*是Python的可变参数解包语法,会自动把可迭代对象中的所有元素逐个作为参数传入zip,和手动书写zip(d[0],d[1],d[2])的效果完全一致,适配任意键值对数量的字典场景。
扩展说明
如果你的多个DataLoader长度不一致:
- 默认
zip会以最短的DataLoader长度为准,迭代到最短的那个遍历完成就终止 - 如果你需要以最长的DataLoader长度为准,缺省位置补自定义填充值,可以使用
itertools.zip_longest替换zip:
from itertools import zip_longest # fillvalue 可自定义为你需要的填充值,比如None、空张量等 for index, data in enumerate(zip_longest(*d.values(), fillvalue=None)): # 业务逻辑 pass
内容的提问来源于stack exchange,提问作者user16573587
相关产品推荐
相关产品推荐

