You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python以布尔为键存lambda函数时含sqrt的函数丢失问题

问题根因

这个现象和lambda函数中是否调用math库的sqrt方法没有任何关系,核心问题是Python字典不允许存在重复键,相同键的后续键值对会直接覆盖之前的赋值。

你的代码中bool_list = [True, False, True],和函数列表zip后生成的三组键值对依次为:

  • (True, func1)
  • (False, func2)
  • (True, func3)

当传入dict()构造字典时,第三组键值对的键True和第一组重复,会直接将第一组True对应的func1覆盖为func3,最终字典只会保留两个键值对。你误以为存储失败的func3其实已经成功存入,反而最早的func1被覆盖消失了。

验证方法

你可以新增一行调用代码验证实际存储的函数:

from math import sqrt
bool_list = [True, False, True]
func1 = lambda x: x ** 2
func2 = lambda x: x ** 3
func3 = lambda x: sqrt(x)
func_list = [func1, func2, func3]
dic = dict(zip(bool_list, func_list))
print(dic[True](4))
# 输出结果为2.0,正好是func3调用sqrt(4)的计算结果,完全可以证明func3已经成功存入字典
符合你预期的实现方案

如果你想要存储多个对应True键的函数,遍历触发所有对应函数,可以把字典的值设置为列表存储多个函数,修改逻辑如下:

from math import sqrt
bool_list = [True, False, True]
func1 = lambda x: x ** 2
func2 = lambda x: x ** 3
func3 = lambda x: sqrt(x)
func_list = [func1, func2, func3]

dic = {}
for key, func in zip(bool_list, func_list):
    dic.setdefault(key, []).append(func)

# 遍历调用所有键为True的函数
for func in dic.get(True, []):
    print(func(4))
# 输出依次为16、2.0

内容的提问来源于stack exchange,提问作者Kanan Mahammadli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:27:03