【问题标题】:Validate dicts in Python在 Python 中验证字典
【发布时间】:2011-08-26 02:16:41
【问题描述】:


我正在寻找工具或示例来/如何在 python 中验证字典。
例如,我有 dict:

test = {'foo' : 'bar', 'nested' : {'foo1' : 'bar1', 'foo2' : 'bar2'} }

现在我必须验证它。可以说,键 foo 的值必须是布尔值 False 或非空字符串。接下来,如果键 foo1 具有值 bar1,则该键 foo2 必须1..10 范围内为 int。我编写了简单的函数来做到这一点,但这不是我真正想要的。是的,当然,我可以用if..else 测试dict 中的每一个项目,但是如果dict 有>50 个元素,那就有点不舒服了。

在 Python 中是否有任何好的工具/lib 可以做到这一点?我不是在寻找解析器,只有 快速 和有效的方法来做到这一点。

【问题讨论】:

标签: python validation dictionary schema associative-array


【解决方案1】:

Voluptous 是一个很好的工具,可以做到这一点 http://pypi.python.org/pypi/voluptuous

【讨论】:

  • 正是我想要的。谢谢你:)
【解决方案2】:

你也可以试试下面的链接:
https://github.com/sunlightlabs/validictory
它是一个很棒的包,有助于以更简单的方式进行验证

【讨论】:

  • 从2018年开始折旧,需要改用jsonschema。
【解决方案3】:

Webster 是一个 pypi 包,它执行字典验证和值正则表达式验证。这使您可以确保字典具有其应有的所有键,并且值或多或少是您所期望的。

https://pypi.python.org/pypi/Webster

【讨论】:

  • 因为这是一个已有 4 年历史的问题,答案已经被接受,如果您提供更多详细信息会更好。您是否提出了更具创新性的解决方案?如果是,请解释一下。您是否复制了建议的示例?
【解决方案4】:

我强烈推荐Cerberus 的可读性或jsonschema 因为它使用JSON Schema 标准

【讨论】:

    【解决方案5】:

    这个dict-schema-validator 包是一种验证python 字典的非常简单的方法。

    这是一个代表客户的简单模式:

    {
      "_id":          "ObjectId",
      "created":      "date",
      "is_active":    "bool",
      "fullname":     "string",
      "age":          ["int", "null"],
      "contact": {
        "phone":      "string",
        "email":      "string"
      },
      "cards": [{
        "type":       "string",
        "expires":    "date"
      }]
    }
    

    验证:

    from datetime import datetime
    import json
    from dict_schema_validator import validator
    
    
    with open('models/customer.json', 'r') as j:
        schema = json.loads(j.read())
    
    customer = {
        "_id":          123,
        "created":      datetime.now(),
        "is_active":    True,
        "fullname":     "Jorge York",
        "age":          32,
        "contact": {
            "phone":    "559-940-1435",
            "email":    "york@example.com",
            "skype":    "j.york123"
        },
        "cards": [
            {"type": "visa", "expires": "12/2029"},
            {"type": "visa"},
        ]
    }
    
    errors = validator.validate(schema, customer)
    for err in errors:
        print(err['msg'])
    

    输出:

    [*] "_id" has wrong type. Expected: "ObjectId", found: "int"
    [+] Extra field: "contact.skype" having type: "str"
    [*] "cards[0].expires" has wrong type. Expected: "date", found: "str"
    [-] Missing field: "cards[1].expires"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-27
      • 2022-01-16
      • 2021-12-16
      • 2018-01-30
      • 2017-12-18
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      相关资源
      最近更新 更多