【问题标题】:Validate dictionary values验证字典值
【发布时间】:2021-12-16 14:22:43
【问题描述】:

我正在尝试创建一个函数,它可以接收任何参数,但只有在它是字典时才返回 True。到这里为止,没关系。但我的 dic 有一些规则:拥有 3 个键:'name'、'pass' 和 'rule'。 'name' 和 'pass' 值应该是 né 字符串并且超过 1 个单词。 'rule' 值是一个带有 2 个键的 dic:'vals' 是一个有 2 个正整数的元组,而 'char' 是一个小写字母。

应该是这样的:

IsValid({'name':john.d', 'pass':'aabcde', 'rule':{'vals':(2,4), 'char':'a'}})

是的

IsValid({'name':john.d', 'pass':'aabcde', 'rule':{'vals':1, 'char':'a'}})

错误

如何访问每个 Key 并为值的每个字段创建条件?

【问题讨论】:

  • 你的代码在哪里?
  • 由于每个键都有不同的规则,因此使用类似处理所有键的函数是没有意义的。
  • 所以只需编写一组if 语句来执行每个检查。
  • @Barmar 我本来打算使用 if 语句,但连接时遇到了问题。谢谢!仍在努力。
  • 不要在标题中添加[CLOSE]。如果问题真的结束了,这会自动完成。

标签: python string dictionary


【解决方案1】:

你可以试试这样的:

def IsValid (data):
    if type(data) is not dict:
        return False

    if 'name' not in data:
        return False
    elif type(data['name']) is not str:
        return False

    # add the remaining checks
    # ......

    # All ok, return True
     return True

【讨论】:

    【解决方案2】:

    基本上让函数检查所有这些。

    喜欢:

      def my_checker_function(unsafe_dict):
        for key in ['name', 'pass', 'rule']:
          if key not in unsafe_dict:
            return False
        if not isinstance(unsafe_dict['name'], str): 
          return False
        # more checks
        return True
    

    只需以这种方式编写您的异常,返回 False。最后,返回 True。

    【讨论】:

      【解决方案3】:
      def isValid(a):
          keys = ['name', 'pass', 'rule']
          if isinstance(a, dict) and all([i in a for i in keys]):
              if all([isinstance(a[i], str) for i in keys[:-1]]):
                  if isinstance(a['rule'], dict) and all([i in a['rule'] for i in ['vals', 'char']]):
                      if isinstance(a['rule']['vals'], tuple) and len(a['rule']['char']) == 1 and a['rule']['char'].islower():
                          return True
          return False
      

      【讨论】:

      • 谢谢@Pedro Maia。多亏了你,我才知道如何在字典中列出各种条件及其关系。我一直在为不得不提出所有的 if 问题而苦苦挣扎。
      • 嗨@CateC,不客气,如果您需要更多帮助,请告诉我,也可以考虑接受答案并给予支持。
      猜你喜欢
      • 2017-05-27
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多