你可以说
defaultdict是设置默认有用 填充字典之前 和
setdefault是设置默认值有用 ,同时或填充字典之后 。
可能是最常见的用例:对项目进行分组(在未排序的数据中,否则使用
itertools.groupby)
# really verbosenew = {}for (key, value) in data: if key in new: new[key].append( value ) else: new[key] = [value]# easy with setdefaultnew = {}for (key, value) in data: group = new.setdefault(key, []) # key might exist already group.append( value )# even simpler with defaultdict from collections import defaultdictnew = defaultdict(list)for (key, value) in data: new[key].append( value ) # all keys have a default already有时您想确保在创建字典后存在特定的键。
defaultdict在这种情况下不起作用,因为它仅在显式访问时创建密钥。认为您使用的HTTP带有很多标头-
有些标头是可选的,但您希望使用它们的默认值:
headers = parse_headers( msg ) # parse the message, get a dict# now add all the optional headersfor headername, defaultvalue in optional_headers: headers.setdefault( headername, defaultvalue )



