Glom:如何包含特定于字段的默认值
Glom: How to include field-specific defaults
如何在 glom 的输出中包含字段特定的 defaults?
例如,我可以像这样包含 "constants":
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'}
当然,有 glommier 方法可以做到这一点。
(我想我会得到荣耀(以及之前不知道的耻辱)。)
答案是:使用带有 default
参数的 glom.Coalesce
。
上面我的 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'}
如何在 glom 的输出中包含字段特定的 defaults?
例如,我可以像这样包含 "constants":
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'}
当然,有 glommier 方法可以做到这一点。
(我想我会得到荣耀(以及之前不知道的耻辱)。)
答案是:使用带有 default
参数的 glom.Coalesce
。
上面我的 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'}