dict 和 collections.defaultdict 之间的区别是什么?

2024-04-25 15:37:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在看彼得·诺维格的code关于如何编写简单的拼写检查程序。一开始,他用这段代码把单词插入词典。

def train(features):
    model = collections.defaultdict(lambda: 1)
    for f in features:
        model[f] += 1
    return model

Python dict和这里使用的Python dict有什么区别?另外,lambda的作用是什么?我查看了API文档here,它说defaultdict实际上是从dict派生的,但是如何决定使用哪一个呢?


Tags: lambda代码informodeldefcodetrain
2条回答

不同之处在于,如果尚未设置键,defaultdict将“默认”一个值。如果不使用defaultdict,则必须检查该键是否存在,如果不存在,则将其设置为所需的值。

lambda正在为默认值定义工厂。该函数在需要默认值时被调用。你可以假设有一个更复杂的默认函数。

Help on class defaultdict in module collections:

class defaultdict(__builtin__.dict)
 |  defaultdict(default_factory) --> dict with default factory
 |  
 |  The default factory is called without arguments to produce
 |  a new value when a key is not present, in __getitem__ only.
 |  A defaultdict compares equal to a dict with the same items.
 |  

(来自help(type(collections.defaultdict()))

{}.setdefault在本质上是相似的,但是接受一个值而不是一个工厂函数。它用于设置值,如果它不存在。。。不过,这有点不同。

如果对于丢失的键有一些有意义的默认值,并且不想显式地处理它们,请使用defaultdict。

defaultdict构造函数将函数作为参数并使用该函数构造值。

lambda: 1

与执行此操作的无参数函数f相同

def f():
 return 1

我忘记了API是这样设计的,而不是将值作为参数。如果我设计了defaultdict接口,它会稍微复杂一些,丢失的值创建函数会将丢失的键作为参数。

相关问题 更多 >