defaultdict和dict的setdefault的比较
时间: 2023-09-30 18:08:26 浏览: 110
`defaultdict`和`dict`的`setdefault`方法都是用于在字典中设置默认值的方法,但它们在一些方面有一些区别。
`dict`的`setdefault(key, default)`方法会检查字典中是否存在指定的键`key`。如果存在,则返回对应的值;如果不存在,则将键`key`插入字典,并将默认值`default`作为该键的值返回。这样,无论键是否存在,都可以通过该方法来获取键对应的值。
例如:
```python
my_dict = {'a': 1, 'b': 2}
value = my_dict.setdefault('a', 3) # 键'a'已存在,返回1
print(my_dict) # 输出: {'a': 1, 'b': 2}
print(value) # 输出: 1
value = my_dict.setdefault('c', 3) # 键'c'不存在,插入并返回默认值3
print(my_dict) # 输出: {'a': 1, 'b': 2, 'c': 3}
print(value) # 输出: 3
```
而`defaultdict`是`collections`模块中的一个类,它在创建时需要传入一个可调用对象(callable),用于指定默认值的生成方式。当访问字典中不存在的键时,`defaultdict`会自动调用默认值生成函数来创建对应的值。
```python
from collections import defaultdict
my_dict = defaultdict(int) # 默认值为int类型的0
my_dict['a'] += 1
my_dict['b'] += 2
print(my_dict) # 输出: defaultdict(<class 'int'>, {'a': 1, 'b': 2})
print(my_dict['c']) # 键'c'不存在,调用默认值生成函数int(),返回0
print(my_dict) # 输出: defaultdict(<class 'int'>, {'a': 1, 'b': 2, 'c': 0})
```
总结来说,`setdefault`是字典的方法,适用于普通字典,可以设置默认值;而`defaultdict`是一个特殊的字典类,可以在创建时指定默认值的生成方式。
阅读全文