I. Introduction
This page is mainly used to record some knowledge of python dictionaries
2. Detailed explanation of defaultdict in Python
2.1 The default value returned by defaultdict
Defaultdict, as the name implies, is the default dictionary. This dictionary is a subset of ordinary dictionaries and is an improvement on ordinary dictionaries.
Use of dcit :
When accessing a key that does not exist in the dictionary, an error will be reported
The use of defaultdict :
When accessing a key that does not exist in the dictionary, the default value will be returned
In fact, defaultdict can also return other default values. Defaultdict generally accepts a factory function as a parameter, and different parameters return different default values.
语法:dict =defaultdict( factory_function)
Among them, factory_function can be set, list, str, int, dict, etc., when accessing a key that does not exist
defaultdict(set) returns set()
defaultdict(list) returns []
defaultdict(str) returns an empty string
defaultdict(int) returns 0
defaultdict(dict) returns dict
Example:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from collections import defaultdict dict1 = defaultdict(set) dict2 = defaultdict(list) dict3 = defaultdict(str) dict4 = defaultdict(int) dict5 = defaultdict(dict) print(dict1[1]) print(dict2[1]) print(dict3[1]) print(dict4[1]) print(dict5[1]) |
get:
set()
[]
0
{}
2.2. The use of defaultdict
The factory function is list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from collections import defaultdict def test2(): test_list = [("A", "1"), ("B", "1"), ("A", "2"), ("B", "2"), ("A", "3"), ("B", "3")] test_default_dict = defaultdict(list) print(test_default_dict) for key, value in test_list: test_default_dict[key].append(value) print(test_default_dict) print(type(test_default_dict)) for key, value in test_default_dict.items(): print(key, value) if __name__ == "__main__": test2 () |
output:
defaultdict(<class 'list'>, {})
defaultdict(<class 'list'>, {'A': ['1', '2', '3'], 'B': ['1', '2', '3']})
<class 'collections.defaultdict'>
A ['1', '2', '3']
B ['1', '2', '3']
工厂函数为str
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
def test3(): test_str = "hello_default_dict" test_default_dict = defaultdict(str) print(test_default_dict) for single_str in test_str: test_default_dict[single_str] = single_str print(test_default_dict) print(type(test_default_dict)) for key, value in test_default_dict.items(): print(type(test_default_dict[key])) if __name__ == "__main__": test3() |
输出:
defaultdict(<class 'str'>, {})
defaultdict(<class 'str'>, {'h': 'h', 'e': 'e', 'l': 'l', 'o': 'o', '_': '_', 'd': 'd', 'f': 'f', 'a': 'a', 'u': 'u', 't': 't', 'i': 'i', 'c': 'c'})
<class 'collections.defaultdict'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
综上我们可以发现经过指定的工厂函数,defaultdict里面的value类型会变为这个指定的数据类型
三、总结
1.defaultdict可以优化普通字典访问不存在的key带来的错误,返回默认值
2.指定工厂函数后,value可以转变为相应的数据类型