Python之默认字典 (defaultdict)

本文深入讲解默认字典(defaultdict)的使用方法,包括如何创建不同类型默认字典及避免异常处理,通过实例演示int、list、tuple和str类型默认值的生成。

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

 

任务描述

本关任务:补充函数代码,创建不同类型的默认字典。

默认字典 (defaultdict)

默认字典的功能与dict基本相同,但在访问一个不存在的key时,默认字典会提供一个默认值,而不是引发异常。

创建默认字典

默认字典的构造函数接受一个工厂函数default_factory作为参数,可以将一个类型名看做是一个工厂函数,比如listtuplestr等。
这个函数会在要生成默认值的时候无参调用,如果使用类型名作为工厂函数,则这个类型必须要有无参构造函数,比如:

  1. dd = collections.defaultdict(int) #使用int作为工厂函数
  2. print(dd['a']) #访问不存在的key:'a'
  3.  
  4. dd = collections.defaultdict(tuple) #使用tuple作为工厂函数
  5. print(dd['a']) #访问不存在的key:'a'
  6.  
  7. dd = collections.defaultdict(str) #使用str作为工厂函数
  8. print(dd['a']) #访问不存在的key:'a'
  9.  
  10.  
  11. class Test:
  12. def __init__(self,name): #只有一个构造函数,而且它有一个参数
  13. print("init")
  14.  
  15. dd = collections.defaultdict(Test) #使用自定义类型Test作为工厂函数
  16. print(dd['a']) #运行到这里就会出现异常,原因是Test类没有无参的构造函数

直到最后一行语句之前,上面的结果是:
0
()
 
第三行是字符串的默认值:空字符串。

如果不提供工厂函数,那么默认值的功能就失效了,此时默认字典与普通dict表现的功能一致:

  1. dd = collections.defaultdict()
  2. print(dd['a']) #虽然dd是一个默认字典,但由于没有指定工厂函数,没办法产生一个默认值,因此还是会发生异常

编程要求

根据右边编辑器中各个函数中的提示,将函数补充完整,使得程序能够正常运行并输出正确的结果
右侧编辑器的4个函数会被依次调用,并产生4个默认字典,并会以类似如下的方式,获取并输出默认值:

  1. dd = GetIntDefaultDict()
  2. print("int默认字典的默认值:",dd['a'])

测试说明

正确的补充代码后应该得到的结果:
int默认字典的默认值: 0
list默认字典的默认值: []
tuple默认字典的默认值: ()
str默认字典的默认值:

### 遍历 defaultdict 的方法 `defaultdict` 是 `collections` 模块中的一个类,它是字典的一个子类,默认会为不存在的键提供默认值。遍历 `defaultdict` 和普通字典的方式相同[^1]。 以下是通过 `for` 循环遍历 `defaultdict` 的具体实现: #### 使用键遍历 可以通过直接迭代 `defaultdict` 来访问其所有的键: ```python from collections import defaultdict # 创建一个 defaultdict 实例 my_default_dict = defaultdict(int) my_default_dict['a'] = 1 my_default_dict['b'] = 2 # 遍历 defaultdict 中的所有键 for key in my_default_dict: print(f"Key: {key}, Value: {my_default_dict[key]}") # 输出键及其对应的值 ``` #### 同时获取键和值 可以使用 `.items()` 方法来同时获取键和值: ```python from collections import defaultdict # 创建一个 defaultdict 实例 my_default_dict = defaultdict(float) my_default_dict['x'] = 3.5 my_default_dict['y'] = 4.0 # 遍历 defaultdict 中的所有键值对 for key, value in my_default_dict.items(): print(f"Key: {key}, Value: {value}") # 输出键值对 ``` #### 结合条件语句或其他控制流 可以在 `for` 循环中结合其他控制结构(如 `if`, `break`, 或 `continue`),以便更灵活地处理数据[^3]: ```python from collections import defaultdict # 创建一个 defaultdict 实例 my_default_dict = defaultdict(str) my_default_dict['name'] = 'Alice' my_default_dict['age'] = '25' # 遍历时跳过特定条件的数据 for key, value in my_default_dict.items(): if key == 'age': continue # 跳过 age 键 print(f"{key}: {value}") ``` 以上展示了如何利用 `for` 循环高效地遍历 `defaultdict` 并执行所需操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值