【问题标题】:Voluptuous at least one-of key in dictionary validation?字典验证中至少有一个键?
【发布时间】:2021-01-31 18:33:19
【问题描述】:

假设我想要一本字典,其中至少包含三个键 foo', 'bar', baz 中的一个。以下将允许一个空集。

Schema({
  'foo': str,
  'bar': int,
  'baz': bool
})

很遗憾,我不能这样做:

Any(
  Schema({'foo': str}),
  Schema({'bar': int}),
  Schema({'baz': bool)
)

最好的方法是什么?

【问题讨论】:

    标签: python voluptuous


    【解决方案1】:

    字典至少包含三个键 foo'、'bar'、baz

    如何达到这个:它已经在 github voluptuous 项目中描述。

    解决方案(为您的示例采用):

    from voluptuous import All, Any, Optional, Required, Schema
    
    key_schema = Schema({
        Required(
            Any('foo', 'bar', 'baz'),
            msg="Must specify at least one of ['foo', 'bar', 'baz']"): object
    })
    
    data_schema = Schema({
        Optional('foo'): str,
        Optional('bar'): int,
        Optional('baz'): bool,
    })
    
    s = All(key_schema, data_schema)
    

    因此,s 是您可以在代码和测试中使用的最终架构。

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2014-06-17
      • 2012-04-14
      • 1970-01-01
      • 2013-10-04
      • 2022-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多