统计strings 中某个单词出现的次数
strings = ('puppy', 'kitten', 'puppy', 'puppy',
'weasel', 'puppy', 'kitten', 'puppy')
counts = {}
for kw in strings:
if kw not in counts:
counts[kw] = 1
else:
counts[kw] += 1''
也可以使用setdefault() 方法来设置默认值
strings = ()
counts = {}
for kw in strings:
counts.setdefault(kw,0)
counts[kw] += 1
最后用 defaultdict 来实现
from collections import defaultdict
defaultdict类除了接受类型名称作为初始化函数的参数之外,还可以使用任何不带参数的可调用函数,到时该函数的返回结果作为默认值,这样使得默认值的取值更加灵活
def zero():
return 0
counts = defaultdict(lambda:0)
counts = defaultdict(int)
for s in strings:
counts[s] += 1
```python
def log_missing():
print('Key added')
return 0
current = {'green': 12, 'blue': 3}
increments = [
('red', 5),
('blue', 17),
('orange', 9),
]
result = defaultdict(log_missing, current)
print('Before:', dict(result))
for key, amount in increments:
result[key] += amount
print('After: ', dict(result))
class CountMissing(object):
def __init__(self):
self.added = 0
def missing(self):
self.added += 1
return 0
counter = CountMissing()
result = defaultdict(counter.missing, current) # Method ref
for key, amount in increments:
result[key] += amount
assert counter.added == 2
class bCountMissing(object):
def __init__(self):
self.added = 0
def __call__(self):
self.added += 1
return 0
counter = bCountMissing()
assert callable(counter)
result = defaultdict(counter, current) # Method ref
for key, amount in increments:
result[key] += amount
assert counter.added == 2