2012-02-16 65 views
1

跨大量项目做验证我有大约100个字段,我需要确保有非空值。要做到这一点我做的:使用全部()

if all([field1, field2, ...]): 
    print 'ok' 
else: 
    raise 

不过,我想知道哪些领域有空值,这样我就可以提示用户纠正这些。有没有一种简单的方法可以使用all()或其他方法显示哪些字段在大规模验证中具有空值?

回答

6

假设你存储“领域”在dict

>>> fields = {'a': 'A', 'b': '', 'c': 'C'} 
>>> [key for key, value in fields.iteritems() if not value] 
['b'] 

如果它是一个列表,你想知道其中的值是空的指标:

>>> fields = ['a', 'b', '', 'd'] 
>>> [index for index, value in enumerate(fields) if not value] 
[2] 
1

all()返回False只要它碰到一个虚假的值;它甚至不会完成迭代你的列表。只需构建两个有效和空字段的列表。

valid_fields = [f for f in fields if f] 
empty_fields = [f for f in fields if not f] 
if empty_fields: 
    raise 
+0

除了你迭代'fields'两次并创建两个新的列表来引导这个事实之外,这并不坏。这种方法可能成本很高,取决于'fields'的大小。 – jathanism 2012-02-16 22:30:05

1

空元组列表可能不是那么有用,所以你可能需要他们的索引。 尝试

[i for i, field in enumerate(fields) if not field] 
+0

+1索引思考! – jathanism 2012-02-16 22:30:43

0

只是为了好玩...

any(do_something(index) for index, field in enumerate(mylist) if not field) 

只是确保do_something()不返回任何内容或返回错误值。