1

在决定学习 RxPy 时,我参加了 O'Reilly 的免费课程 Reactive Python for Data Science

我很快意识到代码是为 Python 3.5 和 RxPy2 编写的,所以我分叉了原始仓库并决定通过重构 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

我的重构代码是在这里派生的Reactive Python RxPy3,课程是 code_examples 文件6.4A_grouping_into_lists.py

4

1 回答 1

3

由于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']
于 2020-06-12T14:02:35.313 回答