Vim*_*Vim 4 python dictionary python-3.x defaultdict
在给出的例子的文档都似乎是情况下,在第一个调用的参数defaultdict
是"常量"功能,如int
,list
或者lambda: const
等我不知道,如果defaultdict
只是应该采取恒定的功能作为其callabe的说法,但如果没有,我希望callable依赖于我给出的缺失键值.例如
toy = collections.defaultdict(lambda x: len(x), {'foo': 3})
toy['barr']
Run Code Online (Sandbox Code Playgroud)
我期望的是每当我给出一个缺少的键字符串时,例如'barr'
,容器可以创建一个新的条目,'barr'
其中键是键,其长度4
是值.但它不起作用.相反,它给我以下错误:
TypeError: <lambda>() missing 1 required positional argument: 'x'
Run Code Online (Sandbox Code Playgroud)
我希望'barr'
在lambda
这里有这个论点,但显然不是这样.那可能出了什么问题?
默认工厂永远不会给出任何参数,所以你不能这样做.但是,您可以做的是子类defaultdict
并定义__missing__
方法:
class CustomDefaultDict(collections.defaultdict):
def __missing__(self, key):
self[key] = value = len(key)
return value
Run Code Online (Sandbox Code Playgroud)
为了使它更容易扩展,你也可以利用default_factory
它,但给它作为一个参数的关键:
class CustomDefaultDict(collections.defaultdict):
def __missing__(self, key):
if self.default_factory is None:
raise KeyError((key,))
self[key] = value = self.default_factory(key)
return value
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
397 次 |
最近记录: |