RxPy3 group_by 创建 "groupedobservables" 但 flat_map 不起作用 - Reactive Python for Data Science Refactor

RxPy3 group_by creates "groupedobservables" but flat_map doesn't work - Reactive Python for Data Science Refactor

在决定学习 RxPy 时,我参加了 O'Reilly 的数据科学免费课程 Reactive Python

我很快意识到代码是为 Python 3.5 和 RxPy2 编写的,所以我分叉了原始 repo 并决定通过重构 RxPy3

的代码来学习

版本 2 的原始代码是:

from rx import Observable

items = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon"]

Observable.from_(items) \
    .group_by(lambda s: len(s)) \
    .flat_map(lambda grp: grp.to_list()) \
    .subscribe(lambda i: print(i))

我已经学会了导入 from_operators 以及使用 `.pipe 将运算符串在一起。

到目前为止我必须:

from rx import from_, operators as ops

items = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon"]

from_(items).pipe(
    ops.group_by(lambda s: len(s)),
    ops.flat_map(lambda grp: grp.to_list())  # Todo grp.to_list() of a groupedobservable is not working - fix it
).subscribe(lambda i: print(i))

问题是 ops.group_by 提供了一组 "groupedobservables",其中 ops.flat_map 代码 grp.to_list() 没有映射到分组列表中。

原代码在这里:Reactive Python for Data Science

我的重构代码在此处 fork Reactive Python RxPy3,课程是 code_examples 文件 6.4A_grouping_into_lists.py

由于to_list是一个运算符,应该通过嵌套pipe应用于分组:

from rx import of, operators as ops

of("Alpha", "Beta", "Gamma", "Delta", "Epsilon").pipe(
    ops.group_by(lambda s: len(s)),
    ops.flat_map(lambda grp: grp.pipe(ops.to_list()))  
).subscribe(lambda i: print(i))

结果:

['Alpha', 'Gamma', 'Delta']
['Beta']
['Epsilon']