python defaultdict用法
pre:
python 生成字典可以使用{},可以使用dict,生成的字典在 dict[key]取值时如果key不存在会报错
defaultdict
当字典里的key不存在但是取值时不会报错,会返回一个默认值,默认值取决于初始化的工厂函数
-
dict =defaultdict(factory_function)
-
factory_function
factory_function为list时,默认值为[]
factory_function为str时,默认值为"",即空字符串
factory_function为set时,默认值为set()
factory_function为int时,默认值为0 -
exp(list)
from collections import defaultdict
# list 第一次返回空列表,可以实现数据合并
s = [('red', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
print(d)
# defaultdict(<class 'list'>, {'red': [1, 1], 'blue': [2, 4], 'yellow': [3]})
- exp(int)
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from collections import defaultdict
# int 初始化返回0,实现计数
str = "aswewesdcawreqmo"
d = defaultdict(int)
for s in str:
d[s]+=1
print(d)
# defaultdict(<class 'int'>, {'a': 2, 's': 2, 'w': 3, 'e': 3, 'd': 1, 'c': 1, 'r': 1, 'q': 1, 'm': 1, 'o': 1})
python2 python3 dict区别
1.原理
python3.6 之前
3.6之前字典底层维护一张hash表, 如果把该表看为一个数组, 即维护一个二维数组, 初始状态默认8行3列, 第一列为key值hash结果, 第二列为key, 第三列为value对key值使用hash函数, 得到的hash值跟现有长度取余, 余数即为键值对在数组中的下标, 查找也是先获取下标根据下标取值, 所以时间复杂度为O(1)
由于先计算得到下标再根据下表插入键值对, 有两个问题:
- hash冲突(开放寻址法;再hash)
- 字典键值对在列表中存储顺序没有与插入顺序保持一致
2.方法:keys() items() values()
- python2 中上述方法返回list对象, 可直接遍历
- python2 中上述方法分别返回
dict_keys
、dict_items
、dict_values
对象, 不可直接按照索引方式取值, 可用for循环遍历, 内存开销更小
本文来自博客园,作者:I'm_江河湖海,转载请注明原文链接:https://www.cnblogs.com/jhhh/p/16761312.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了