ハンスの答えは近いですが、ちょっとした調整が必要です。
私のオブザーバーは{ 'user': ..., 'date': }
辞書得ることを期待:
import rx
def pp1(x):
print type(x), x
rx.Observable.from_([
{ "user": "a", "date": "2017-02-14" },
{ "user": "b", "date": "2016-01-01" },
{ "user": "c", "date": "2015-01-01" },
{ "user": "a", "date": "2017-01-01" },
{ "user": "b", "date": "2017-01-01" }]) \
.map(lambda x: x[0]) \
.subscribe(pp1)
利回り要約を含む長さ1のリストを取得終わりにオブザーバーで.group_byと.flat_map結果を行う
<type 'dict'> {'date': '2017-02-14', 'user': 'a'}
<type 'dict'> {'date': '2016-01-01', 'user': 'b'}
<type 'dict'> {'date': '2015-01-01', 'user': 'c'}
<type 'dict'> {'date': '2017-01-01', 'user': 'a'}
<type 'dict'> {'date': '2017-01-01', 'user': 'b'}
を、単に要約の代わりに。
import rx
def pp1(x):
print type(x), x
rx.Observable.from_([
{ "user": "a", "date": "2017-02-14" },
{ "user": "b", "date": "2016-01-01" },
{ "user": "c", "date": "2015-01-01" },
{ "user": "a", "date": "2017-01-01" },
{ "user": "b", "date": "2017-01-01" }]) \
.group_by(lambda x: x['user']) \
.flat_map(lambda x: x.max_by(lambda y: y['date'], lambda a,b: -1 if a < b else 1 if a>b else 0)) \
.subscribe(pp1)
利回りマップを追加するために必要な
<type 'list'> [{'date': '2017-02-14', 'user': 'a'}]
<type 'list'> [{'date': '2017-01-01', 'user': 'b'}]
<type 'list'> [{'date': '2015-01-01', 'user': 'c'}]
:
import rx
def pp1(x):
print type(x), x
rx.Observable.from_([
{ "user": "a", "date": "2017-02-14" },
{ "user": "b", "date": "2016-01-01" },
{ "user": "c", "date": "2015-01-01" },
{ "user": "a", "date": "2017-01-01" },
{ "user": "b", "date": "2017-01-01" }]) \
.group_by(lambda x: x['user']) \
.flat_map(lambda x: x.max_by(lambda y: y['date'], lambda a,b: -1 if a < b else 1 if a>b else 0)) \
.map(lambda x: x[0]) \
.subscribe(pp1)
期待
<type 'dict'> {'date': '2017-02-14', 'user': 'a'}
<type 'dict'> {'date': '2017-01-01', 'user': 'b'}
<type 'dict'> {'date': '2015-01-01', 'user': 'c'}
すごいが得られます。これは料理本の品質です。 –