我有以下加入:

r.db("public").table("police_internal_affairs_allegations").eq_join("organization_id", r.db("public").table("organizations")).run()


示例行是:

{u'right': {u'id': u'2a5e2e3d-275a-426e-9ecd-0bd5601bff6b', u'name': u"King County Sheriff's Office"}, u'left': {u'': u'3896', u'IIU #': u'IIU2012-158', u'Occurred date': u'14-Sep-12', u'Directive': u'03.00.020-PERFORMANCE STANDARDS', u'Action taken': u'', u'Date hired': u'2-Aug-93', u'Employee Type (snap)': u'Employee Sworn', u'id': u'0002ec82-450b-4686-b7c9-9b15d18e7ed8', u'ID number': u'3896', u'Finding date': u'6-Dec-12', u'organization_id': u'2a5e2e3d-275a-426e-9ecd-0bd5601bff6b', u'First name': u'Mark', u'Incident type': u'Inquiry', u'Finding': u'Exonerated', u'CAD/Incident No': u'12-217028', u'Last name': u'Sigurdson'}}


我希望右侧的键以organization_开头,然后执行zip()

我可以使用Python做到这一点(请参见下文),但在RethinkDB中希望做到这一点。

modified_joined_data = []
for data in joined_data:
    d = {}
    d.update(data['left'])
    new_right_side = data['right'].items()
    new_right_side = dict([('organization_'+item[0], item[1]) for item in new_right_side])
    d.update(new_right_side)
    modified_joined_data.append(d)


我找到了一半解决方案:

joined_data = list(r.db("public").table("police_internal_affairs_allegations").eq_join("organization_id", r.db("public").table("organizations")).map({"right":{
    "organization_id": r.row["right"]["id"],
    "organization_name": r.row["right"]["name"]
}, "left": r.row["left"]}).zip().run())


我会喜欢一个不需要我拼出右手边的版本。

最佳答案

我认为这可行:

EQ_JOIN.merge(
  lambda row: {'right': row['right'].coerce_to('array').map(
                          lambda pair: [r.expr('organization_') + pair[0], pair[1]]
                        ).coerce_to('object')}
)

关于python - 如何重命名联接结果右侧的所有键以添加值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33987948/

10-12 12:40