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_keysdict_itemsdict_values对象, 不可直接按照索引方式取值, 可用for循环遍历, 内存开销更小
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值