首页 > 解决方案 > 字典验证中至少有一个键?

问题描述

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

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

不幸的是,我不能这样做:

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

最好的方法是什么?

标签: pythonvoluptuous

解决方案


至少具有三个键 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是您可以在代码和测试中使用的最终模式。


推荐阅读