IterKeyZipper¶
- class torchdata.datapipes.iter.IterKeyZipper(source_datapipe: IterDataPipe, ref_datapipe: IterDataPipe, key_fn: Callable, ref_key_fn: Optional[Callable] = None, keep_key: bool = False, buffer_size: int = 10000, merge_fn: Optional[Callable] = None)¶
根据匹配的键(函数名称:
zip_with_iter
)将两个 IterDataPipes 压缩在一起。键分别由key_fn
和ref_key_fn
为两个 IterDataPipes 计算。当两个 IterDataPipes 的元素之间没有匹配时,来自ref_datapipe
的元素将存储在缓冲区中。然后,将尝试来自ref_datapipe
的下一个元素。找到匹配项后,merge_fn
将确定如何将它们组合在一起并返回(默认情况下将生成一个元组)。- 参数::
source_datapipe – IterKeyZipper 将根据此 IterDataPipe 的顺序生成数据
ref_datapipe – 引用 IterDataPipe,IterKeyZipper 将从中查找与
source_datapipe
具有匹配键的项key_fn – 可调用函数,用于使用来自
source_datapipe
的元素计算键ref_key_fn – 可调用函数,用于使用来自
ref_datapipe
的元素计算键。如果未指定,key_fn
也将应用于来自ref_datapipe
的元素keep_key – 选项是在元组中与项一起生成匹配的键,从而产生 (key, merge_fn(item1, item2))。
buffer_size – 用于保存来自引用 DataPipe 的键-数据对直到找到匹配项的缓冲区大小。如果将其指定为
None
,则缓冲区大小将设置为无穷大。merge_fn – 用于组合来自
source_datapipe
的项和来自ref_datapipe
的项的函数,默认情况下将创建元组
示例
>>> from torchdata.datapipes.iter import IterableWrapper >>> from operator import itemgetter >>> def merge_fn(t1, t2): >>> return t1[1] + t2[1] >>> dp1 = IterableWrapper([('a', 100), ('b', 200), ('c', 300)]) >>> dp2 = IterableWrapper([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) >>> res_dp = dp1.zip_with_iter(dp2, key_fn=itemgetter(0), >>> ref_key_fn=itemgetter(0), keep_key=True, merge_fn=merge_fn) >>> list(res_dp) [('a', 101), ('b', 202), ('c', 303)]