Python collections.defaultdict模块用法详解

1. collections.defaultdict简介

Python的collections模块提供了一种名为defaultdict的数据类型。defaultdict是dict的子类,它重写了dict类的__missing__方法。defaultdict在创建时需要提供一个默认值的类型,当访问一个不存在的键时,会自动创建该键并将其值初始化为默认值。这个特点使得defaultdict非常适合处理一些特殊需求的数据结构。

2. 使用collections.defaultdict

2.1 创建defaultdict对象

要使用defaultdict,首先需要导入collections模块:

import collections

然后可以创建一个defaultdict对象。在创建时需指定一个默认值的类型,可以是int、list、dict等基本类型或自定义类型。

my_dict = collections.defaultdict(int)

上述代码创建了一个默认值类型为int的defaultdict对象。当访问一个未存在的键时,会自动把该键添加到字典中,并将其值初始化为0。

2.2 添加和访问元素

defaultdict与普通字典的使用方式基本相同。可以使用字典的索引操作符[]来添加和访问元素。

my_dict['a'] = 1

print(my_dict['a'])

上述代码将键'a'和值1添加到defaultdict对象中,并输出该键的值。

当访问一个不存在的键时,defaultdict会自动创建该键并将其值初始化为默认值。

print(my_dict['b'])

由于键'b'在defaultdict中不存在,defaultdict会自动创建该键,并将其值初始化为int类型的默认值0。

3. defaultdict的应用场景

3.1 统计字符出现次数

defaultdict可以用于快速统计字符串中每个字符出现的次数。

my_str = 'hello world'

char_count = collections.defaultdict(int)

for char in my_str:

char_count[char] += 1

print(char_count)

上述代码中,使用了defaultdict对象char_count来记录每个字符的出现次数。遍历字符串my_str,并将每个字符作为键,递增其对应的值。

3.2 分组元素

使用defaultdict可以很方便地将元素按照某个属性进行分组。

students = [{'name': 'Alice', 'age': 20},

{'name': 'Bob', 'age': 22},

{'name': 'Charlie', 'age': 20}]

group_by_age = collections.defaultdict(list)

for student in students:

group_by_age[student['age']].append(student['name'])

print(group_by_age)

上述代码中,将一个学生列表按照年龄进行分组。使用defaultdict对象group_by_age,键为年龄,值为同一年龄下的学生姓名组成的列表。

4. 总结

defaultdict是collections模块中的一个重要数据类型,它提供了一种方便的方式来处理一些特殊需求的数据结构。使用defaultdict可以简化代码,提高效率。

本文介绍了defaultdict的基本用法,包括创建defaultdict对象、添加和访问元素等。并通过实际的应用场景来说明defaultdict的使用方法。

后端开发标签