字典基础

创建字典的几种方式:
字典的key只能为元组,不可重复,后会覆盖前

d = {‘a’:1,‘b’:2,‘c’:3}d
d = dict([(a,b,c),(1,2,3)])
d= dict(a=1,b=2,c=3)
k=[‘a’,‘b’,‘c’]
v=[1,2,3]
d=dict(zip(k,v))
通过fromkeys创建值为空的字典:
d = dict.fromkeys([‘a’,‘b’,‘c’])

字典值得访问:

d[‘a’]
d.get(‘a’,‘不存在’) 推荐使用,若指定键不存在返回none,也可以设置返回值,而不是报错
d.items()返回所有键值对
d.keys()返回所有键
d.values()返回所有值
len()返回键值对得个数

元素得添加修改删除
d[‘adress’] = 'beijing’键重复则覆盖
e = {‘name’:‘zhangsan’,‘age’:18,‘sex’=‘男’}
d.update(e)
d结果为
d = {‘a’:1,‘b’:2,‘c’:3,‘name’:‘zhangsan’,‘age’:18,‘sex’='男‘}
del(d[‘age’])
d.clear()删除所有键值对
d.pop(‘age’)删除指定键值对并返回
d.popitem()随机删除和返回键值对

字典核心底层原理:
存:对key计算哈希值,然后看对应得bucket是否为空,若为空,放,不空看换偏移量得buctet是否为空,若满,扩容,直到把键值放进去
取:对key计算哈希值,对应得bucket是否有,有则取,对取出来得计算哈希,看是否是要求得数字,不相等继续找。和存储的底层流程算法一致,也是依次取散列值的不同位置的数字。 假设数组长度为 8,我们可以拿计算出的散列值的最右边 3位数字作为偏移量,即“101”,十进制是数字 5。我们查看偏移量 5,对应的bucket 是否为空。如果为空,则返回None。如果不为空, 则将这个bucket的键对象计算对应散列值,和我们的散列值进行比较,如果相等。则将对 应“值对象”返回。如果不相等,则再依次取其他几位数字,重新计算偏移量。依次取完后, 仍然没有找到。则返回 None。
用法总结:
1、 键必须可散列
(1) 数字、字符串、元组,都是可散列的。
(2) 自定义对象需要支持下面三点:
1 支持 hash()函数
2 支持通过__eq__()方法检测相等性。
3 若a==b为真,则
2、 hash(a)==hash(b)也为真。
3、字典在内存中开销巨大,典型的空间换时间。
键查询速度很快
往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字 典的同时进行字典的修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值