在学习python数据分析的时候,碰到defaultdict的使用,下面说明一下:
先看例子:如果我要将一个包含单词的列表按照单词的首字母分类,并组成一个字典。
words = ['apple', 'pear', 'peach', 'banana', 'plum']
by_letter = {}
for word in words:
letter = word[0]
if letter not in by_letter:
by_letter[letter] = [word]
else:
by_letter[letter].append(word)
输出:
另一种方法是使用dict的内置方法:setdefault(key,默认值)。该方法是尝试设置key值,如果key存在,则返回key对应的值,如果key不存在,则添加该key,并将默认值作为它的值。
words = ['apple', 'pear', 'peach', 'banana', 'plum']
by_letter = {}
for word in words:
letter = word[0]
by_letter.setdefault(letter, []).append(word)
输出结果同上。
最后一种方法是使用defaultdict,它接受一个工厂方法来构造:
d = defaultdict(factory_function)
这里的factory_function可以是list,set,str等其他,当字典中的key不存在时,返回的是factory_function的默认值,比如list返回[],str返回空字符串'',int返回0。
下面使用defaultdict实现上述的要求:
from collections import defaultdict
words = ['apple', 'pear', 'peach', 'banana', 'plum']
by_letter = defaultdict(list)#使用list方法作为工厂方法,key不存在返回[]
for word in words:
by_letter[word[0]].append(word)
输出同上。但是for循环中一行代码就实现了功能,很简洁。