‘setdefault’ dict方法的用例

问题:

在Python 2.5中添加collections.defaultdict大大减少了对dict setdefault方法的需求。这个问题是为了我们的集体教育:

  1. 什么是setdefault仍然有用,今天在Python 2.6 / 2.7?
  2. setdefault的普遍使用案例已被collections.defaultdict取代?

回答:

您可以说defaultdict对设置默认值before filling the dict很有用,而setdefault对于设置默认值while or after filling the dict很有用。
可能是最常见的用例:分组项目(未排序的数据,否则使用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 
new = defaultdict(list)
for (key, value) in data:
    new[key].append( value ) # all keys have a default already

有时你想确定在创建一个dict后存在特定的键。在这种情况下,defaultdict不起作用,因为它仅在显式访问上创建密钥。认为您使用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 )

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Use cases for the ‘setdefault’ dict method

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 2