python - 'setdefault' dict 方法的用例

标签 python dictionary setdefault

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

  1. setdefault 在今天的 Python 2.6/2.7 中还有什么用处?
  2. 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/

相关文章:

python - python中带有setdefault的全局变量

python - 如何从列表列表创建字典键?

python - setdefault() 没有关键字参数

python - Selenium 未向输入字段发送波浪字符 (~)

c++ - 在结构 vector 的结构 vector 的映射中存储数据

python - 如何区分点散布matplotlib on pick

python - 如何将 csv 文件的行转换为对象列表?

python - 在 map 中使用条件和 lambda

python - Python 中的列表是否有 Don't Care 值

python - numpy.gradient() 似乎产生错误的边界值(使用一阶差分)