Py学习  »  Python

python使用if语句验证多个值

sagar_dev • 5 年前 • 1563 次点击  

示例1检查单个值:

def validate(self, data, check, col):
    output = []
    for key, value in data.iteritems():
        try:
            if value[col] == check:
                output.append("{},{},Passed".format(key,value[col]))
            else:
                output.append("{},{},Failed".format(key,value[col]))
        except IndexError as e:
            pass
    return output


data1 = {key1:['a','b','c','ok'], key2:['a','b','c','down']}
check = "ok"
col = 3
print self.validate(data1, check, col)

输出:

['key1','ok','Passed', 'key2','down','Failed']

示例2检查两个值:

 data1 = {key1:['a','b','c','ok', "True"], key2:['a','b','c','down', "False"]}

 def validate(self, data, check1, check2, col1, col2):
    output = []
    for key, value in data.iteritems():
        try:
            if value[col1] == check1 and value[col2] == check2:
                output.append("{},{},{},Passed".format(key,value[col1], value[col2]))
            else:
                output.append("{},{},Failed".format(key,value[col1], value[col2]))
        except IndexError as e:
            pass
    return output

有没有一种方法可以在一个代码中实现上述两个示例(验证多个值1、2、3、4)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43135
 
1563 次点击  
文章 [ 2 ]  |  最新文章 5 年前
David Zemens
Reply   •   1 楼
David Zemens    6 年前

如果您不需要一个object/return中的所有输出,我们可以对第一个函数进行一些调整。

from collections import defaultdict

def validate(data, check_value, column_index):
    # validating whether the list item at column_index == check_value
    output = defaultdict(list)
    for k,v in data.items():  # for python2, use data.iteritems()
        if check_value in v and column_index <= len(v) and v[column_index] == check_value:
            output[check_value].append({k: [v[column_index], 'passed']})
        else:
            output[check_value].append({k: [v[column_index], 'failed']})
    return output

这将为您的单值测试返回相同的预期结果。

您可以对多个值执行类似的操作:

check_values = ['ok', 'b']
column_indices = [3, 2]

for value, index in zip(check_values, column_indices):
    validate(data, value, index)

返回:

defaultdict(<class 'list'>, {'ok': [{'key1': ['ok', 'passed']}, {'key2': ['down', 'failed']}]})
defaultdict(<class 'list'>, {'b': [{'key1': ['c', 'failed']}, {'key2': ['c', 'failed']}]})
Jean-François Fabre
Reply   •   2 楼
Jean-François Fabre    6 年前

为什么不使用 all 列/检查值的压缩列表?

if all(value[col] == check for col,check in zip((col1,col2),(check1,check2))):

如果你有更多的参数,我建议你:

def validate(self, data, check1, check2, col1, col2):

进入之内

def validate(self, data, check_values, columns):

所以你可以适应:

if all(value[col] == check for col,check in zip(columns,check_values)):

而且,由于这些值和列是链接的,所以可以直接传递元组列表或将它们链接在一起的字典 validate .