首页 > 解决方案 > 如果键可以为无,则使用理解过滤字典列表?

问题描述

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

既然有可能arg1arg2将会有None,有没有更好的方法来编写这段代码,所以我不必is None在执行列表理解之前先检查 if 变量?

a = list of dictionaries

if arg1 is None and arg2 is None:
    result = a
elif arg1 is not None and arg2 is not None:
    result = [d for d in a if d['key1'] == arg1 and d['key2'] == arg2]
elif arg1 is not None and arg2 is None:
    result = [d for d in a if d['key1'] == arg1]
elif arg1 is None and arg2 is not None:
    result = [d for d in a if d['key2'] == arg2]

标签: pythondictionary

解决方案


您可以检查is None作为理解的一部分。这应该涵盖上述所有四种情况:

result = [d for d in a if (arg1 is None or arg1 == d['key1']) and (arg2 is None or arg2 == d['key2'])]

推荐阅读