2

如何在 glom 的输出中包含特定于字段的默认值?

例如,我可以像这样包含“常量”:

from glom import Spec, Literal
extract = Spec({'A': 'a', 'B': Literal(42)}).glom
assert extract({'a': 'life'}) == {'A': 'life', 'B': 42}

但是,只有在输入中没有“B”时,我如何指定“B”应该指向 42?走出glom,我可以这样做:

from glom import Spec
extract = lambda d: dict(Spec({'A': 'a'}).glom(d), B=d.get('B', 42))
assert extract({'a': 'life'}) == {'A': 'life', 'B': 42}
assert extract({'a': 'life', 'B': 'is short'}) == {'A': 'life', 'B': 'is short'}

当然,有一种更糟糕的方法可以做到这一点。

4

1 回答 1

0

(我想我会得到荣耀(并为没有早点知道这一点而感到羞耻)。)

答案是:其中的论点一起使用glom.Coalescedefault

上面我的使用 lambda 的代码的 glom 等效项:

from glom import Spec, Coalesce
extract = Spec({'A': 'a', 'B': Coalesce('B', default=42)}).glom  # the solution
assert extract({'a': 'life'}) == {'A': 'life', 'B': 42}
assert extract({'a': 'life', 'B': 'is short'}) == {'A': 'life', 'B': 'is short'}
于 2019-10-01T17:45:03.363 回答