python 中defaultdict()对字典进行初始化的用法介绍

  • Post category:Python

Python 中 defaultdict()collections 模块提供的一种字典的子类,它重写了一个方法来设定每个未定义的键的默认值,默认值可以是 Python 中任何的数据类型。下面我们将详细讲解 defaultdict() 对字典进行初始化的用法介绍。

1. defaultdict() 的创建

默认情况下,创建一个 defaultdict() 与创建一个普通的字典非常相似。你需要调用 defaultdict() 的构造函数,并指定默认值的类型。下面是一个例子:

from collections import defaultdict

dict1 = defaultdict(int)
dict2 = defaultdict(list)

在以上示例中,我们可以看到,我们分别创建了两个 defaultdict()。第一个字典的默认值类型为整数 (int),第二个字典的默认值类型为列表 (list)。

2. defaultdict() 的使用

一旦创建了 defaultdict(),你就可以使用类似于普通字典的方式,添加或修改键值对。当你定义一个键不存在的字典项时,defaultdict() 将会使用你定义的默认值创建这个新项目。

在下面的示例中,我们将使用 defaultdict() 对一个列表进行初始化。假如我们想要将一个单词列表按照首字母分组,这个时候我们很容易想到使用字典,但是我们需要在字典中为每个字母的键值做初始化处理。这个时候,defaultdict() 就成了非常好的选择。下面是代码示例:

from collections import defaultdict

words = ['apple', 'banana', 'cherry', 'date', 'elderberry']

# 使用 defaultdict() 对每个首字母做初始化,并将相应的单词加入到对应的列表中
words_dict = defaultdict(list)
for word in words:
    words_dict[word[0]].append(word)

# 打印输出结果
for k, v in words_dict.items():
    print(k, ':', v)

执行以上代码,我们可以得到结果:

a : ['apple']
b : ['banana']
c : ['cherry']
d : ['date']
e : ['elderberry']

在上面的示例中,当我们执行 words_dict[word[0]].append(word) 时,如果 words_dict 中不存在 word[0] 这个键,defaultdict() 会使用 list() 构造一个空列表,并将其作为默认值存储在字典中。这样,无论该键是否存在,我们都可以使用 append() 函数来向字典中添加新的值,达到对字典进行初始化的目的。

总结

defaultdict() 可以用于在字典上自动初始化缺失的值,在某些情况下可以方便地进行编码并减少了很多不必要的工作。但是,使用 defaultdict() 会增加一些额外的开销,因此,如果你仅仅需要一个简单的字典实现,可能会更适合使用普通的 dict