【问题标题】:Python: Validating each values in dictionaryPython:验证字典中的每个值
【发布时间】:2016-03-23 14:20:41
【问题描述】:

在不使用任何外部库的情况下验证字典中每个值的最佳方法是什么

for example dict = {"A":"some_string",
                    "B":12,
                    "C":83,
                    "D":56.......so on}

我必须验证如果键是 A 那么值应该是 string 和 如果键为B,则值应为int,范围为1 to 20 如果 key 是 C 那么 value 应该是 int 并且范围从 1 到 100 所以基于键,值的验证也不同......

有什么更短的方法吗?我的字典很大

【问题讨论】:

  • 有多少个键?并且您在相应的价值要求之间有什么模式吗?
  • 这些规则从何而来?没有它,这不是一个定义非常明确的问题。
  • 创建另一个字典,其键映射到验证函数并使用类似validations[key](value)

标签: python validation dictionary


【解决方案1】:

这是另一个字典的方法:

d = {"A":"some_string",
     "B":12,
     "C":83,
     "D":56}

# Map your validation functions to the keys
validations = {
    "A": lambda x: isinstance(x, str),
    "B": lambda x: isinstance(x, int) and 1 <= x <= 20,
    "C": lambda x: isinstance(x, int) and 1 <= x <= 100,
}

for k, v in d.items():
    print(validations.get(k, lambda x: False)(v))  # Default validation just returns False (invalid)

要检查字典是否有效,您可以使用:

print(all(validations.get(k, lambda x: False)(v) for (k, v) in d.items()))

【讨论】:

    【解决方案2】:

    假设您在字典中定义了预期的类型:

    typeExpected = {'A':str, 'B':int}
    

    表示密钥 A 应包含 string,密钥 B 应包含 int。让我们将要测试的字典定义为:

    exampleData = {'A':'ok', 'B':0}
    

    现在您可以通过运行来验证类型的正确性:

    map(lambda x: type(exampleData[x]) == typeExpected[x], exampleData)
    

    在您的数据上试试这个,如果您的字典确实太大,将地图转换为 pool.map 以在多处理中工作会很容易。

    【讨论】:

      猜你喜欢
      • 2019-12-29
      • 2021-12-16
      • 2011-08-26
      • 1970-01-01
      • 2011-06-09
      • 2021-08-19
      • 2021-09-13
      • 2016-08-18
      • 2022-01-02
      相关资源
      最近更新 更多