如果key可以为None,则使用理解过滤字典列表。

时间:2019-06-23 00:35:04

标签: python dictionary

我想使用列表理解来过滤字典列表。

由于arg1arg2可能是None,因此有更好的方式编写此代码,因此我不必先检查变量{{1 }}在执行列表理解之前?

is None

3 个答案:

答案 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来说,这可能会更慢。