【发布时间】:2021-01-26 12:59:58
【问题描述】:
我需要一个字典,该字典会自动填充每个缺失的访问键的默认值。我找到了defaultdict 和其他一些方法来实现这一点,但我的问题是我希望每个键的默认值都特定于键本身。
例如,使用defaultdict 我可以实现这样的目标:
from collections import defaultdict
d = defaultdict(lambda: 5)
> d[1] = 3
> d[1]
> 3
> d[2]
> 5
但是如果我需要每个访问的缺失键的默认值是 key + 5 呢?比如:
from collections import defaultdict
d = defaultdict(lambda key: key + 5) # <-- This does not work as defaultdict expects lambda function to be without any parameters
> d[1] = 3
> d[1]
> 3
> d[2]
> 7 <- Calculated from accessed key + 5 (2+5)
> d[5]
> 10 <- Calculated from accessed key + 5 (5+5)
是否有一种简洁的内置方式来实现我的需求?我知道我可以创建 dict 的子类并在__getitem__ 级别实现此特定功能,但我想尽可能避免这种情况。
我在其他答案中找不到解决方案,如果仍然重复,请见谅。
【问题讨论】:
-
为什么你认为你现在的方式不干净?
-
defaultdict仅适用于不带参数的 lambda 函数,因此第二个示例不是有效的 python 代码。 -
它只是显示了我想要最终得到什么样的功能
-
哦,好的。我认为这是当前的行为,您需要进一步改进。
标签: python python-3.x dictionary defaultdict