使用marshmallow模式将字典加载到多个字典中

时间:2017-06-22 13:49:22

标签: python dictionary marshmallow

我想做这样的事情:

我有dict

x = {
     'D': 'abc',
     'E': 'def',
     'F': 'asd',
     'G': 'gef'
} 

我希望marshmallow架构将其转换为dict,看起来像:

y = {
   'var1': {
       'D': 'abc',
       'E': 'def',
       'F': 'asd'
   },
   'var2': {
       'G': 'gef'
   }
}

更新:考虑我有另一个dict来定义密钥的存在位置

s = {
       'var1': ['D', 'E', 'F', 'I'],
       'var2': ['G', 'A']
   }

我无法找出使这项工作的架构。

1 个答案:

答案 0 :(得分:0)

不是正式的,不。这是已记录的错误/缺失功能:https://github.com/marshmallow-code/marshmallow/issues/940

但是,有非常简单的解决方法。这是我的(也发布在该线程中):

from marshmallow import fields

class SelfNested(fields.Nested):
    def get_value(self, obj, attr, accessor=None, default=missing):
        return obj

您现在可以像使用常规SelfNested一样使用此Nested类,但是它将允许您访问父字段。

因此对于您的示例,您可以这样做:

from marshmallow import fields
from marshmallow.schema import Schema

class Var1Schema(Schema):
    D = fields.String()
    E = fields.String()
    F = fields.String()

class Var2Schema(Schema):
    G = fields.String()

class MySchema(Schema):
    var1 = SelfNested(Var1Schema())
    var2 = SelfNested(Var2Schema())