我想使用列表理解来过滤字典列表。
由于arg1
或arg2
可能是None
,因此有更好的方式编写此代码,因此我不必先检查变量{{1 }}在执行列表理解之前?
is None
答案 0 :(得分:1)
作为理解的一部分,您可以检查is None
。这应该涵盖以上所有四种情况:
result = [d for d in a if (arg1 is None or arg1 == d['key1']) and (arg2 is None or arg2 == d['key2'])]
答案 1 :(得分:0)
您可以尝试使用filter(),如果什么也没找到,它将返回一个空值:
result = list(filter(lambda x: x['key1'] == arg1, a))
result += list(filter(lambda x: x['key2'] == arg2, a))
答案 2 :(得分:0)
您可以通过两个单独的步骤过滤a
:
result = a.copy()
if arg1 is not None:
result = [d for d in result if d['key1'] == arg1]
if arg2 is not None:
result = [d for d in result if d['key2'] == arg2]
尽管对于长a
来说,这可能会更慢。