在 Python 2.5 中添加的 collections.defaultdict
大大减少了对 dict
的 setdefault
方法的需求。这个问题是针对我们的集体教育的:
setdefault
在今天的 Python 2.6/2.7 中还有什么用处?setdefault
的哪些流行用例被collections.defaultdict
取代?
最佳答案
你可以说 defaultdict
在填充字典之前 对设置默认值很有用 并且 setdefault
对于设置默认值很有用 while 或 after填写字典。
可能是最常见的用例:对项目进行分组(在未排序的数据中,否则使用 itertools.groupby
)
# really verbose
new = {}
for (key, value) in data:
if key in new:
new[key].append( value )
else:
new[key] = [value]
# easy with setdefault
new = {}
for (key, value) in data:
group = new.setdefault(key, []) # key might exist already
group.append( value )
# even simpler with defaultdict
from collections import defaultdict
new = defaultdict(list)
for (key, value) in data:
new[key].append( value ) # all keys have a default already
有时您想确保在创建 dict 后存在特定的键。 defaultdict
在这种情况下不起作用,因为它只在显式访问时创建键。认为您使用带有许多 header 的 HTTP-ish —— 有些是可选的,但您希望它们具有默认值:
headers = parse_headers( msg ) # parse the message, get a dict
# now add all the optional headers
for headername, defaultvalue in optional_headers:
headers.setdefault( headername, defaultvalue )
关于python - 'setdefault' dict 方法的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3483520/