Python dict高级技巧:defaultdict与OrderedDict
版权申诉
87 浏览量
更新于2024-09-11
收藏 281KB PDF 举报
"这篇文章主要探讨了Python中dict()的一些高级用法,包括使用collections模块中的defaultdict以及OrderedDict。文章通过具体的示例代码详细讲解了如何处理键映射多个值的情况,如何统计字典中特定值的出现次数,以及如何创建和操作有序字典。"
在Python中,dict()函数通常用于创建字典,但在高级用法中,我们可以利用其特性进行更复杂的操作。`collections.defaultdict`是一个非常实用的工具,它可以自动初始化字典中不存在的键的值。例如,当我们需要一个键对应多个值时,通常会将这些值存储在一个列表或集合中。defaultdict使得这个过程更加便捷,它接受一个工厂函数作为参数,如`defaultdict(list)`或`defaultdict(set)`,这意味着每当访问一个不存在的键时,它会自动用这个工厂函数创建一个新的容器。
例如,要将一个包含重复键的列表转换为字典,其中键对应一个值列表,可以使用defaultdict:
```python
from collections import defaultdict
data = [('a', 1), ('b', 2), ('a', 3), ('c', 4)]
dd = defaultdict(list)
for key, value in data:
dd[key].append(value)
# 结果:defaultdict(<class 'list'>, {'a': [1, 3], 'b': [2], 'c': [4]})
```
此外,defaultdict还可以用于统计字典中特定值的出现次数。假设我们有一个包含字典的列表,想计算相同键的值之和,可以这样做:
```python
from collections import defaultdict
dict_list = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 30}]
dd = defaultdict(int)
for d in dict_list:
dd[d['age']] += 1
# 结果:defaultdict(<class 'int'>, {25: 2, 30: 1})
```
另一个重要的高级用法是使用`collections.OrderedDict`,这是一个保持插入顺序的字典。与普通的字典不同,OrderedDict在插入新键值对或更新已有键时会记住它们的顺序。例如:
```python
from collections import OrderedDict
od = OrderedDict([('foo', 1), ('bar', 2)])
# 结果:OrderedDict([('foo', 1), ('bar', 2)])
od['baz'] = 3
# 结果:OrderedDict([('foo', 1), ('bar', 2), ('baz', 3)])
```
如果需要改变OrderedDict中key-value的顺序,可以使用`move_to_end`方法。例如,如果我们想把'bar'移动到最后:
```python
od.move_to_end('bar', last=False)
# 结果:OrderedDict([('foo', 1), ('baz', 3), ('bar', 2)])
```
了解并熟练使用defaultdict和OrderedDict可以极大地提高Python编程的效率和代码的可读性。在处理键值映射和数据统计时,它们提供了强大的功能,同时保持代码简洁。不过,由于OrderedDict需要额外存储顺序信息,所以在内存敏感的应用场景中应谨慎使用。
2020-12-25 上传
2020-12-24 上传
2023-08-19 上传
2021-09-16 上传
2020-09-22 上传
2020-09-21 上传
2020-09-20 上传
2021-05-12 上传
weixin_38735987
- 粉丝: 4
- 资源: 931
最新资源
- 20210218_z中文latex-lshort.zip
- dynamic-programming:动态编程问题的解决方案
- cryptoverse-wars-backend
- NHSRdatasets:这是CRAN R软件包系统信息库的只读镜像。 NHSRdatasets —用于教育和培训的与NHS和医疗保健相关的数据。 主页
- LUA5.3支持库1.6版(lua4.fne)-易语言
- three-squirrels-web
- Q00CPU与HITECH触摸屏的通讯的示例。.zip三菱PLC编程案例源码资料编程控制器应用通讯通信例子程序实例
- petGame
- todos-app:使用Laravel框架php解决我的100daysofcode挑战的TODO应用程序
- AI Partition(银灿U盘分区工具)V2.0.0.3
- Stranger-Things:使用JS,jQuery和封闭源社区数据库构建了“消费者对消费者”(C2C)在线交易平台
- 屏蔽win键-易语言
- zenn
- flash_unde_noaxu
- pokedex-react-app-ts
- WiseBot:怀斯(Wise)打造的神奇机器人