跨大量项目做验证我有大约100个字段,我需要确保有非空值。要做到这一点我做的:使用全部()
if all([field1, field2, ...]):
print 'ok'
else:
raise
不过,我想知道哪些领域有空值,这样我就可以提示用户纠正这些。有没有一种简单的方法可以使用all()
或其他方法显示哪些字段在大规模验证中具有空值?
跨大量项目做验证我有大约100个字段,我需要确保有非空值。要做到这一点我做的:使用全部()
if all([field1, field2, ...]):
print 'ok'
else:
raise
不过,我想知道哪些领域有空值,这样我就可以提示用户纠正这些。有没有一种简单的方法可以使用all()
或其他方法显示哪些字段在大规模验证中具有空值?
假设你存储“领域”在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]
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
空元组列表可能不是那么有用,所以你可能需要他们的索引。 尝试
[i for i, field in enumerate(fields) if not field]
+1索引思考! – jathanism 2012-02-16 22:30:43
只是为了好玩...
any(do_something(index) for index, field in enumerate(mylist) if not field)
只是确保do_something()不返回任何内容或返回错误值。
除了你迭代'fields'两次并创建两个新的列表来引导这个事实之外,这并不坏。这种方法可能成本很高,取决于'fields'的大小。 – jathanism 2012-02-16 22:30:05