使用类型来初始化字典
可以按照所需类型来初始化字典
>>> from collections import defaultdict
>>> dd = defaultdict(list)
>>> dd
defaultdict(<type 'list'>, {})
>>> dd = defaultdict(list)
>>> dd = defaultdict(list)
>>> dd[1]
[]
>>> dd[2]
[]
>>> dd['a']
[]
>>> dd1 = defaultdict(str)
>>> dd1[1]
''
>>> dd1[2]
''
>>> dd2 = defaultdict(int)
>>> dd2[1]
0
>>> dd2[2]
0
>>> dd3 = defaultdict(tuple)
>>> dd3[1]
()
>>> dd3[2]
()
设置还可以把所需的类型设置成另外一个defaultdict
,类似套娃
dct = collections.defaultdict(collections.defaultdict)
#defaultdict(<type 'collections.defaultdict'>,{})
>>> dct = defaultdict(defaultdict)
>>> dct
defaultdict(<class 'collections.defaultdict'>, {})
>>> dct['project']
defaultdict(None, {})
其他用处
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
可以等效为:
counts = defaultsdict(int)
for kw in strings:
counts[kw] += 1
难道使用int
类型的时候,只能初始化为0吗 ? 不是的,这个特殊字典使用的类型只要是可调用的类型就行,那么我们可以定制一个函数来实现一些特殊的初始化值实际上。比如:
def ones():
return 1
dd = defautdict(ones)
dd[5]
>>1