gpt4 book ai didi

python - 棉花糖压平嵌套对象

转载 作者:太空狗 更新时间:2023-10-30 01:31:47 24 4
gpt4 key购买 nike

我的对象看起来有点像:

source = {
id: 123,
objects: [
{
random_data: aaaa,
actual_data: {
useful: 111,
...
}
},
{
random_data: bbbb,
actual_data: {
useful: 222,
...
}
}
]
}

虽然我可以轻松地按原样对其进行序列化,但将其转换为以下格式会更有用:

dest = {
id: 123,
objects: [
{
useful: 111,
...
},
{
useful: 222,
...
}
]
}

鉴于我已经有了最内层对象的架构(上面源代码中的 actual_data - 它比我的示例显示的要复杂得多),展平嵌套对象的最佳方法是什么我只从 actual_data 获取对象而没有额外的深度?我本以为会是这样的

objects = Nested(UsefulSchema, many=True, load_from"<something>.useful_data")

但我一直无法在不对数据进行预处理的情况下找到解决方案。

注意我已经大大简化了我的例子,以给出我的问题的最简单形式。在我的实际代码中,源数据是来自 sqlalchemy 的大量类似对象。

最佳答案

对于 marshmallow 版本 >= 3 (Python 3)

您可以通过使用 Pluck 字段允许父级从其子级获取数据来实现这一点。

class ActualDataSchema(ModelSchema):
useful = fields.String()
also_useful = fields.String()

class ObjectSchema(ModelSchema):
useful = fields.Pluck(ActualDataSchema, 'useful')
also_useful = fields.Pluck(ActualDataSchema, 'also_useful')

class DestSchema(ModelSchema):
id = fields.Integer()
objects = fields.Nested(ObjectSchema, many=True)

对于 marshmallow 版本 < 3 (Python 2)

您必须改用 MethodFunction 字段。

class ObjectSchema(ModelSchema):
useful = fields.Function(lambda obj: obj.actual_data.useful)
also_useful = fields.Function(lambda obj: obj.actual_data.also_useful)

class DestSchema(ModelSchema):
id = fields.Integer()
objects = fields.Nested(ObjectSchema, many=True)

更多信息

关于python - 棉花糖压平嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48951151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com