我需要一个字典,它会自动填充每个缺失的访问键的默认值。我发现了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__
水平,但我想如果可能的话避免这种情况。
我在其他答案中找不到解决方案,如果它仍然重复,很抱歉。
我认为没有内置的方法可以做到这一点。然而,而不是子类化dict
并改变getitem
,你可以子类化defaultdict https://docs.python.org/3/library/collections.html#defaultdict-objects自己告诉__missing__()
打电话给default_factory
带有一个参数(key
),而不是没有参数。它仍然是一个自定义类,而不是内置类,但它应该仍然非常高效。
from collections import defaultdict
class DefaultDict(defaultdict):
def __missing__(self, key):
return self.default_factory(key)
Then:
d = DefaultDict(lambda key: key + 5)
d[2]
# 7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)