社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python中最高频的模块

Python之禅 • 4 年前 • 798 次点击  

题图:Photo by Wengang Zhai on Unsplash

昨天标题写的是Python中最冷门的模块,很多人表示不服,这里接受大家的意见。说明我的读者里面大部分都是有经验的老司机了。


考虑到还有很多小白关注着,今天换了个标题,这下你们没意见了吧。


今天继续介绍 collections 模块下第二个重要的类型 defaultdict

defaultdict

defaultdict 是 dict 类型的子类,正如其名,初始化时,可以给key指定默认值,什么意思呢?直接看代码。

如果是普通的dict对象,访问一个不存在的key时,会报错:

>>> raw_d = dict()
>>> raw_d['a']
NameError: name 'raw' is not defined

而使用 defaultdict,可以给不存在的 key 一个默认的初始值,例如:

默认值为空列表的字典

d = defaultdict(list)
>>> d['a']
[]

默认值为0的字典

>>> d = defaultdict(int)
>>> d['a']
0

defaultdict 函数接收的参数是一个可调用对象,你可以简单理解为是一个函数对象,int,list 本来也是一个函数,如果我希望默认值不是0,而是1,该怎么处理呢?可以使用匿名函数

>>> d = defaultdict(lambda :1)
>>> d['a']
1

也可以自己定义一个函数

from collections import defaultdict

def v2():
return 2

d = defaultdict(v2)
print(d["a"]) # 2

最后说个 defaultdict 的使用场景,让你的代码更加 pythonic

处理如下数据,将相同的值放在一组

data = [("p", 1), ("p", 2), ("p", 3),
("h", 1), ("h", 2), ("h", 3)]

变成

result= {'p': [1, 2, 3], 'h': [1, 2, 3]}

先自己想想如何实现。如果用 defaultdict 来处理的话,代码会很优雅

from collections import defaultdict
# 先初始化一个默认值为空列表的字典
result = defaultdict(list)

data = [("p", 1), ("p", 2), ("p", 3),
("h", 1), ("h", 2), ("h", 3)]

# 将value相同的组放在一个key中
for (key, value) in data:
result[key].append(value)

print(result)

>>>defaultdict(, {'p': [1, 2, 3], 'h': [1, 2, 3]})


推荐:


  1. Python最冷门的模块

  2. 卧槽!python这个内置模块可以开发游戏


关注我,每天分享实用小知识

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/70305
 
798 次点击  
文章 [ 1 ]  |  最新文章 4 年前