python的setdefault与defaultdict函数怎么用

发布时间:2022-01-17 15:21:43 作者:iii
来源:亿速云 阅读:194

Python的setdefault与defaultdict函数怎么用

在Python编程中,处理字典(dict)时,经常会遇到需要为不存在的键设置默认值的情况。为了简化这一过程,Python提供了两种非常有用的工具:setdefault方法和collections.defaultdict类。本文将详细介绍这两种方法的使用场景、区别以及如何在实际编程中应用它们。

1. setdefault方法

setdefault是Python字典对象的一个内置方法,用于获取指定键的值。如果该键不存在,则设置一个默认值并返回该默认值。其语法如下:

dict.setdefault(key, default=None)

1.1 使用场景

假设我们有一个字典,用于记录每个人的爱好。我们希望为每个人添加一个爱好,但如果该人尚未在字典中,我们希望为其初始化一个空列表。

hobbies = {}

# 使用setdefault方法
hobbies.setdefault('Alice', []).append('reading')
hobbies.setdefault('Bob', []).append('gaming')
hobbies.setdefault('Alice', []).append('hiking')

print(hobbies)

输出结果为:

{'Alice': ['reading', 'hiking'], 'Bob': ['gaming']}

在这个例子中,setdefault方法首先检查键是否存在。如果不存在,则将其初始化为一个空列表,然后返回该列表。如果键已经存在,则直接返回对应的值。这样,我们可以轻松地为每个人添加多个爱好。

1.2 与直接赋值的区别

如果不使用setdefault,我们需要先检查键是否存在,然后再决定是否初始化:

hobbies = {}

if 'Alice' not in hobbies:
    hobbies['Alice'] = []
hobbies['Alice'].append('reading')

if 'Bob' not in hobbies:
    hobbies['Bob'] = []
hobbies['Bob'].append('gaming')

if 'Alice' not in hobbies:
    hobbies['Alice'] = []
hobbies['Alice'].append('hiking')

print(hobbies)

虽然这段代码也能达到同样的效果,但它显然更加冗长且容易出错。setdefault方法简化了这一过程,使得代码更加简洁和易读。

2. defaultdict

defaultdictcollections模块中的一个类,它是dict的一个子类。与普通字典不同,defaultdict在初始化时可以指定一个默认值工厂函数。当访问一个不存在的键时,defaultdict会自动调用该工厂函数来生成默认值。

2.1 使用场景

继续以记录爱好的例子为例,我们可以使用defaultdict来简化代码:

from collections import defaultdict

hobbies = defaultdict(list)

hobbies['Alice'].append('reading')
hobbies['Bob'].append('gaming')
hobbies['Alice'].append('hiking')

print(hobbies)

输出结果为:

defaultdict(<class 'list'>, {'Alice': ['reading', 'hiking'], 'Bob': ['gaming']})

在这个例子中,我们创建了一个defaultdict对象,并指定其默认值工厂函数为list。这意味着当我们访问一个不存在的键时,defaultdict会自动调用list()来生成一个空列表作为默认值。

2.2 与setdefault的区别

虽然defaultdictsetdefault都可以用于处理不存在的键,但它们的使用场景和性能有所不同。

2.3 自定义默认值工厂函数

defaultdict的默认值工厂函数不仅限于内置类型,还可以是任何可调用对象。例如,我们可以使用lambda函数来生成自定义的默认值:

from collections import defaultdict

# 使用lambda函数生成默认值
hobbies = defaultdict(lambda: ['unknown'])

hobbies['Alice'].append('reading')
hobbies['Bob'].append('gaming')

print(hobbies['Charlie'])  # 输出: ['unknown']

在这个例子中,当我们访问不存在的键'Charlie'时,defaultdict会自动调用lambda函数生成默认值['unknown']

3. 实际应用示例

3.1 统计单词频率

假设我们有一个文本文件,我们希望统计每个单词出现的频率。我们可以使用defaultdict来简化这一过程:

from collections import defaultdict

text = "this is a simple example example of a simple text"
words = text.split()

word_count = defaultdict(int)

for word in words:
    word_count[word] += 1

print(word_count)

输出结果为:

defaultdict(<class 'int'>, {'this': 1, 'is': 1, 'a': 2, 'simple': 2, 'example': 2, 'of': 1, 'text': 1})

在这个例子中,我们使用defaultdict(int)来初始化一个默认值为0的字典。当我们访问一个不存在的单词时,defaultdict会自动将其值初始化为0,然后我们再进行加1操作。

3.2 分组数据

假设我们有一个包含多个人员信息的列表,我们希望按城市对人员进行分组。我们可以使用defaultdict来实现:

from collections import defaultdict

people = [
    {'name': 'Alice', 'city': 'New York'},
    {'name': 'Bob', 'city': 'Los Angeles'},
    {'name': 'Charlie', 'city': 'New York'},
    {'name': 'David', 'city': 'Chicago'},
    {'name': 'Eve', 'city': 'Los Angeles'},
]

city_groups = defaultdict(list)

for person in people:
    city_groups[person['city']].append(person['name'])

print(city_groups)

输出结果为:

defaultdict(<class 'list'>, {'New York': ['Alice', 'Charlie'], 'Los Angeles': ['Bob', 'Eve'], 'Chicago': ['David']})

在这个例子中,我们使用defaultdict(list)来初始化一个默认值为空列表的字典。当我们访问一个不存在的城市时,defaultdict会自动将其值初始化为空列表,然后我们将人员姓名添加到该列表中。

4. 总结

setdefault方法和defaultdict类都是处理字典中不存在的键时的有力工具。setdefault适用于需要在特定情况下设置默认值的场景,而defaultdict适用于所有键都需要默认值的场景。在实际编程中,根据具体需求选择合适的工具可以大大简化代码并提高效率。

通过本文的介绍,希望读者能够掌握setdefaultdefaultdict的使用方法,并在实际项目中灵活运用它们。

推荐阅读:
  1. Python中的defaultdict与__missing__()使用介绍
  2. 怎样认识Python中的defaultdict

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python setdefault defaultdict

上一篇:衡量python代码质量的唯一有效标准是什么

下一篇:C语言的基本编写规范是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》