1

我想做这样的事情:

我有一个dict

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

我希望棉花糖模式将其转换为dict如下所示:

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

更新:考虑到我有另一个字典,它定义了键应该出现在哪里

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

我无法弄清楚实现这项工作的架构。

4

1 回答 1

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())
于 2019-08-22T08:52:37.867 回答