'setdefault'dict方法的用例

问题描述

你可以说defaultdict是设置默认有用 填充字典之前setdefault是设置默认值有用 ,同时或填充字典之后

可能是最常见的用例:对项目进行分组(在未排序的数据中,否则使用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

有时您想确保在创建字典后存在特定的键。defaultdict在这种情况下不起作用,因为它仅在显式访问时创建密钥。认为您使用的HTTP带有很多标头- 有些标头是可选的,但您希望使用它们的默认值:

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 )

解决方法

加入collections.defaultdict在Python
2.5大大降低用于需要dictsetdefault方法。这个问题是针对我们的集体教育:

  1. 什么是setdefault仍然有用,今天在Python 2.6 / 2.7?
  2. setdefault取代了哪些流行的用例collections.defaultdict

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”