字典基础

创建字典的几种方式:
字典的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、字典在内存中开销巨大,典型的空间换时间。
键查询速度很快
往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字 典的同时进行字典的修改。

发布了11 篇原创文章 · 获赞 0 · 访问量 120

猜你喜欢

转载自blog.csdn.net/jaleya/article/details/104841523