python - 使用 lambda 函数和标量的字典理解

标签 python python-3.x dictionary lambda dictionary-comprehension

我对 lambda 函数和标量有字典理解:

d = {k: lambda x : x.sum() if 'a' in k else 'yes' for k in ['bac','sss','asa']}
print (d)
{'bac': <function <dictcomp>.<lambda> at 0x00000000031891E0>, 
 'sss': <function <dictcomp>.<lambda> at 0x000000000D887EA0>, 
 'asa': <function <dictcomp>.<lambda> at 0x000000000D887B70>}

如果想要两个标量,它工作得很好:

d = {k: 'no' if 'a' in k else 'yes' for k in ['bac','sss','asa']}
print (d)
{'bac': 'no', 'sss': 'yes', 'asa': 'no'}

预期输出 - 标量和 lambda 函数的组合:

print (d)
{'bac': <function <dictcomp>.<lambda> at 0x00000000031891E0>, 
 'sss': 'yes', 
 'asa': <function <dictcomp>.<lambda> at 0x000000000D887B70>}

发生了什么事?为什么它不起作用?什么是正确的做法?

最佳答案

你的语法解析如下(注意括号的位置):

{k: lambda x : (x.sum() if 'a' in k else 'yes') for k in ['bac','sss','asa']}
#              ^                              ^

你想要:

{k: (lambda x : x.sum()) if 'a' in k else 'yes' for k in ['bac','sss','asa']}
#   ^                  ^

这是因为 lambdalower precedenceif-else

一个更简单的例子也说明了这一点:

>>> lambda x: 0 if False else True
<function <lambda> at 0x7efdbe55abf8>
>>> lambda x: (0 if False else True)
<function <lambda> at 0x7efdbe55ac80>
>>> (lambda x: 0) if False else True
True

关于python - 使用 lambda 函数和标量的字典理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54308968/

相关文章:

python - python中根据key值组合字典

python - 我的 python 代码在单独的学习应用程序上运行正常,但在电脑上运行不正常

python - youtube 直播 api 插入消息

python - 在 python 3 和 windows 中拍摄网络摄像头照片

python - 电子竞技比赛预测器(机器学习)

python - 比较两个字典,如果一个字典中存在键/值对,则删除另一个字典中的键/值对

来自套接字的 Python 十六进制转换为 ascii

python - 根据另一个字典的值过滤字典列表

python - 以特定格式将 "dictionary of dictionaries"写入 .csv 文件

python - 验证 2 个大型 Python 字典