dict.setdefault 与 defaultdict [字典的赋值]

本文介绍如何使用Python内置的dict.setdefault方法及collections.defaultdict来高效地处理字典数据,包括在字典中添加数据和自动初始化默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

许多时候我们需要往字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值。如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能。
我们可以使用 dict.setdefault(key, default) 更有效率的完成这个事情。

>>> data = {}
>>> data.setdefault('names', []).append('Ruby')
>>> data
{'names': ['Ruby']}
>>> data.setdefault('names', []).append('Python')
>>> data
{'names': ['Ruby', 'Python']}
>>> data.setdefault('names', []).append('C')
>>> data

{'names': ['Ruby', 'Python', 'C']}


三、defaultdict

defaultdict 是内建 dict 类的子类,它覆写了一个方法并添加了一个可写的实例变量。其余功能与字典相同。

defaultdict() 第一个参数提供了 default_factory 属性的初始值,默认值为 None,default_factory 属性值将作为字典的默认数据类型。所有剩余的参数与字典的构造方法相同,包括关键字参数。


同样的功能使用 defaultdict 比使用 dict.setdefault 方法快。


defaultdict 用例


>>> from collections import defaultdict
>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> d.items()
dict_items([('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])])
在例子中你可以看到,即使 defaultdict 对象不存在某个键,它会自动创建一个空列表。

<think>我们正在讨论Python字典赋值方法。根据引用内容,常见的字典赋值方法包括直接赋值setdefault方法、update方法等。引用[1]中展示了直接赋值(如dic1["aa"]="刘金玉")、setdefault方法(被注释掉了)和update方法(dic1.update(dic2))。引用[2]则提到了嵌套字典的情况,需要构建复杂的字典结构。我将按照用户要求,介绍Python字典赋值方法,包括基本赋值setdefault、update以及嵌套字典赋值等。同时,我会在最后生成相关问题。注意:回答中需要遵循系统级指令,包括数学表达式的格式、引用标识等。由于本问题不涉及数学表达式,因此主要关注字典赋值的代码示例和解释。结构如下:1.直接赋值2.使用setdefault方法3.使用update方法4.嵌套字典赋值5.其他赋值技巧然后生成相关问题。</think>### Python字典赋值方法详解 在Python中,字典dict)是键值对的可变集合,以下是常用的赋值方法: #### 1. **直接赋值** ```python # 初始化字典 person = {"name": "张三", "age": 25} # 修改已有键的值 person["age"] = 26 # 添加新键值对 person["city"] = "北京" ``` #### 2. **setdefault()方法** - 安全添加键值对(键不存在时才添加) ```python scores = {"math": 90} scores.setdefault("english", 85) # 添加新键 scores.setdefault("math", 100) # 键已存在,不修改(值仍为90) ``` #### 3. **update()方法** - 批量合并字典(覆盖重复键) ```python dict1 = {"a": 1, "b": 2} dict2 = {"b": 3, "c": 4} dict1.update(dict2) # 结果: {"a":1, "b":3, "c":4} ``` #### 4. **嵌套字典赋值** ```python # 创建嵌套字典 tree = { "id": 1, "children": [ {"id": 2, "text": "子节点1"}, {"id": 3, "text": "子节点2"} ] } # 修改嵌套值 tree["children"][0]["text"] = "更新节点" ``` #### 5. **字典推导式** ```python # 快速生成字典 squares = {x: x**2 for x in range(5)} # 结果: {0:0, 1:1, 2:4, 3:9, 4:16} ``` > **关键区别**: > - 直接赋值:会覆盖已有键 > - `setdefault()`:仅当键不存在时添加 > - `update()`:批量合并,相同键的值会被覆盖 > - 嵌套字典:通过多级索引访问[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值