python - 使用 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 函数?
解决方案
我认为您正在寻找的是以下内容
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))
希望这可以帮助
推荐阅读
- java - 如何将Scalardb的结果映射到模型中
- javascript - 来到我的服务器的人,帐户不安全的人的角色
- javascript - 使用管道过早关闭,但如果使用管道则不会
- python-3.x - 我正在尝试通过数据结构和链表来增强我的基础知识,但我一直面临这个错误
- amazon-web-services - PowerShell 无法识别安装在同一脚本中的 AWS CLI
- google-apps-script - 无法将脚注转移到新文档中——整个功能失败
- react-native - 是否可以在 React Native 应用程序中禁用 RTL(从右到左 -> 阿拉伯语支持)?
- graphql - GraphQL .NET - 结果中的扩展
- java - Selenium Chrome DevTools:未知错误:无法在 localhost:6666 从 chrome 连接到 chrome 无法访问
- mongoose - 如何在nestjs中填充猫鼬引用?