我正在尝试创建一个等效于非常有用的collections.defaultdict
的列表。以下设计效果很好:
class defaultlist(list):
def __init__(self, fx):
self._fx = fx
def __setitem__(self, index, value):
while len(self) <= index:
self.append(self._fx())
list.__setitem__(self, index, value)
这是如何使用它的:
>>> dl = defaultlist(lambda:'A')
>>> dl[2]='B'
>>> dl[4]='C'
>>> dl
['A', 'A', 'B', 'A', 'C']
我应该添加什么到默认列表中才能支持以下行为?
>>> dl = defaultlist(dict)
>>> dl[2]['a'] = 1
>>> dl
[{}, {}, {'a':1}]
dl[2] = {'a', 1}
更有意义,不是吗? - Brigand