Gad*_*i A 0 python list-comprehension
我有一个字典(但也可以是列表)形式的理解
my_dict = {bar: foo(bar) for bar in some_range if foo(bar) is not None}
Run Code Online (Sandbox Code Playgroud)
这避免了None向字典插入值,但它也迫使我foo对同一元素调用两次。有没有办法避免这种情况并且foo只调用一次,而不用生成带有值的哈希None并稍后对其进行修剪?
从 Python 3.8+ 开始,您可以使用:= 命名表达式进行理解,它将避免调用foo(bar)两次:
my_dict = {bar: val for bar in some_range if val:=foo(bar) is not None}
Run Code Online (Sandbox Code Playgroud)
示例运行:
>>> result = {i:j for i in range(10)
if (j:=(lambda x: x if x%2==0 else None)(i)) is not None}
#output:
{0: 0, 2: 2, 4: 4, 6: 6, 8: 8}
Run Code Online (Sandbox Code Playgroud)