Python defaultdict

来源:这里教程网 时间:2026-02-17 09:46:40 作者:

Python defaultdict

在Python中,defaultdict是collections模块中的一个类,它是dict的一个子类,可以为字典的值提供默认值。当我们访问一个不存在的键时,defaultdict会自动为该键设置一个默认值,而不会抛出KeyError异常。

创建defaultdict对象

我们可以使用defaultdict类来创建一个默认字典对象。在创建defaultdict对象时,我们需要传入一个默认值的类型或者一个函数,用来生成默认值。

from collections import defaultdict# 创建一个默认值为int的defaultdict对象default_dict_int = defaultdict(int)print(default_dict_int['a'])  # 输出:0# 创建一个默认值为list的defaultdict对象default_dict_list = defaultdict(list)print(default_dict_list['b'])  # 输出:[]

Output:

使用defaultdict的示例

示例1:统计字符串中每个字符出现的次数

from collections import defaultdictdef count_characters(s):    char_count = defaultdict(int)    for char in s:        char_count[char] += 1    return char_counts = "geek-docs.com"char_count = count_characters(s)print(char_count)

Output:

示例2:按照字符长度分组字符串列表

from collections import defaultdictdef group_by_length(strings):    grouped_strings = defaultdict(list)    for string in strings:        grouped_strings[len(string)].append(string)    return grouped_stringsstrings = ["geek-docs.com", "python", "defaultdict", "example"]grouped_strings = group_by_length(strings)print(grouped_strings)

Output:

示例3:计算每个单词的长度

from collections import defaultdictdef word_length(words):    word_lengths = defaultdict(int)    for word in words:        word_lengths[word] = len(word)    return word_lengthswords = ["geek-docs.com", "python", "defaultdict", "example"]word_lengths = word_length(words)print(word_lengths)

Output:

设置默认值

我们可以通过传入一个函数来设置defaultdict的默认值。当访问一个不存在的键时,该函数会被调用来生成默认值。

示例4:设置默认值为lambda函数

from collections import defaultdictdefault_dict_lambda = defaultdict(lambda: "default")print(default_dict_lambda['a'])  # 输出:default

Output:

示例5:设置默认值为固定值

from collections import defaultdictdefault_dict_fixed = defaultdict(lambda: 0)default_dict_fixed['a'] = 1print(default_dict_fixed['b'])  # 输出:0

Output:

defaultdict与普通字典的比较

defaultdict与普通字典在使用上有一些区别,下面我们来比较一下它们的不同之处。

示例6:访问不存在的键

from collections import defaultdict# 使用defaultdictdefault_dict = defaultdict(int)print(default_dict['a'])  # 输出:0# 使用普通字典normal_dict = {}# print(normal_dict['a'])  # 会抛出KeyError异常

Output:

示例7:设置默认值

from collections import defaultdict# 使用defaultdictdefault_dict = defaultdict(int)print(default_dict['a'])  # 输出:0# 使用普通字典normal_dict = {}print(normal_dict.get('a', 0))  # 输出:0

Output:

示例8:添加键值对

from collections import defaultdict# 使用defaultdictdefault_dict = defaultdict(int)default_dict['a'] += 1print(default_dict)  # 输出:defaultdict(<class 'int'>, {'a': 1})# 使用普通字典normal_dict = {}normal_dict['a'] = normal_dict.get('a', 0) + 1print(normal_dict)  # 输出:{'a': 1}

Output:

defaultdict的高级用法

示例9:嵌套defaultdict

我们可以创建嵌套的defaultdict,以便更方便地处理多层嵌套的数据结构。

from collections import defaultdictnested_dict = lambda: defaultdict(nested_dict)data = nested_dict()data['a']['b']['c'] = 1print(data)  # 输出:defaultdict(<function <lambda> at 0x7f8b1c1b6d30>, {'a': defaultdict(<function <lambda> at 0x7f8b1c1b6d30>, {'b': defaultdict(<function <lambda> at 0x7f8b1c1b6d30>, {'c': 1})})})

Output:

示例10:使用defaultdict处理图数据结构

我们可以使用defaultdict来处理图数据结构,方便地添加和访问节点和边。

from collections import defaultdictgraph = defaultdict(list)graph['A'].append('B')graph['A'].append('C')graph['B'].append('A')graph['B'].append('D')print(graph)  # 输出:defaultdict(<class 'list'>, {'A': ['B', 'C'], 'B': ['A', 'D']})

Output:

总结

defaultdict是Python中一个非常实用的数据结构,它可以帮助我们更方便地处理字典中的默认值问题,避免了一些繁琐的判断和异常处理。

相关推荐