首页 > 解决方案 > 使用 lambda 的字典理解将内存地址作为值返回

问题描述

我正在尝试在这样的字典理解中使用 lambda 表达式:

d = {k: lambda v, k = k : v == True if not (i%2) else "Not True" for k in range(1,11)}

但是,输出有点奇怪:

{1: <function <dictcomp>.<lambda> at 0x7fe5b714f510>, 
2: <function <dictcomp>.<lambda> at 0x7fe5b714f488>, (...)}

如果我这样做;

v = lambda k: True if not (k%2) else "Not True"

d_1 = {k : v(k) for k in range(1,11)}

产生(期望的)输出:

{1: 'Not True', 2: True, 3: 'Not True', 4: True, 5: 'Not True', 6: True, 7: 'Not True', 8: True, 9: 'Not True', 10: True}

如果我print(v)没有(),输出与前面的字典值非常相似:

 <function <lambda> at 0x7fe5b7136e18>.

我想我错过了对 lambda 函数的调用,但这也不起作用:

d = {k: lambda v, k = k : v(k) == True if not (i%2) else False for k in range(1,11)}

如何在理解中调用 lambda 函数?

标签: pythonpython-3.xdictionarylambda

解决方案


我认为您正在寻找的是以下内容

d = {k: (lambda k: True if not (k%2) else "Not True")(k) for k in range(1,11)}

但是,在我看来,代码看起来超级不可读。如果这是您最终想要做的事情,我只会使用列表理解来过滤掉偶数和奇数。而且由于您想要的字典将索引作为键,因此无论您尝试做什么,列表都应该很好。如果你真的需要它是一个字典,你可以轻松地将过滤后的列表变成一个字典

_d = [True if not (k%2) else "Not True" for k in range(1,11)]
d = dict(zip(range(1,11), _d))

希望这可以帮助


推荐阅读