在python中,是否可以为defaultdict生成一个值,该值是键的函数? 例如:
from collections import defaultdict
d = defaultdict(lambda key=None: key * 2)
这样
d[1]
将产生值 2。
defaultdict
无法执行此操作,因为它的 default_factory
从未传递密钥,但您可以通过在 __missing__()
的子类上定义 dict
来自己实现此功能(如here所述),或者,更方便的是 collections.UserDict
。
from collections import UserDict
class MyDefaultDict(UserDict):
def __missing__(self, key):
value = key * 2
self.data[key] = value
return value
d = MyDefaultDict({1: 3})
print(d[1]) # -> 3
print(d[2]) # -> 4
print(d) # -> {1: 3, 2: 4}