我已经阅读了python文档中的示例,但仍然不明白这个方法是什么意思。有人能帮帮我吗?下面是python文档中的两个例子
>>> from collections import defaultdict
>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
... d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
and
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
... d[k].append(v)
...
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
参数int和list是干什么用的?
defaultdict的行为可以很容易地使用dict模仿。在每次调用中设置default而不是d[key]。
换句话说,代码:
from collections import defaultdict
d = defaultdict(list)
print(d['key']) # empty list []
d['key'].append(1) # adding constant 1 to the list
print(d['key']) # list containing the constant [1]
等价于:
d = dict()
print(d.setdefault('key', list())) # empty list []
d.setdefault('key', list()).append(1) # adding constant 1 to the list
print(d.setdefault('key', list())) # list containing the constant [1]
唯一的区别是,使用defaultdict时,列表构造函数只被调用一次,而使用dict时。Setdefault会更频繁地调用列表构造函数(但如果确实需要,代码可能会被重写以避免这种情况)。
有些人可能会说这是出于性能考虑,但这个话题是一个雷区。例如,这篇文章展示了使用defaultdict并不会带来很大的性能提升。
在我看来,defaultdict是一个给代码带来更多困惑而不是好处的集合。对我没用,但别人可能不这么认为。