我想做这样的事情:
我有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']
}
我无法找出使这项工作的架构。
答案 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())