python中字典的知识详解

字典:

字典是什么:字典是一种储存键值对的结构。

把键(key)和值(value)进行一个一对一的映射,然后就可以根据键,快速找到值。

在python的字典中,可以同时包含很多个键值对。同时要求这些键,不能重复。

一个字典中的value的类型也不必都一样。

字典对于key是啥类型,有约束。

对于value是啥类型,没约束。

#1,创建字典。
a={}
print(type(a))
b=dict()
print(type(b))
#2,创建字典的同时,
a={'id':1,
   'name':'zhangsan'
}
#字典a中,包含了两个键值对
#(1),'id':1,key就是'id',value就是1
#(2),'name':'zhangsan',key就是'name',value就是'zhangsan'

查找key:

#使用in来判定某个key,是否在字典中存在。
a={
    'id':1,
    'name':'zhangsan'
}
print('id' in a)
print('class' in a)
#in 只是判定key是否存在,和value无关。
print('zhangsan' in a)
#not in 来判定key 在字典中不存在。
print('id' not in a)
print('classId' not in a)
#使用[],来根据key获取到value。
a={
    'id':1,
    'name':'zhangsan',
    100:'lisi'
}
print(a['id'])
print(a['name'])
print(a['classId'])

最后这个使用[],来根据key获取到value,最后一行代码,如果没有key,则直接报错。

KeyError:'classId',表示当前这个key,在字典中不存在。

对于字典来说,使用in或者[ ],来获取value,都是非常高效的操作。(背后使用了哈希表)

对于列表来说,使用in比较低效,而使用[ ],是非常高效的。

字典的新增,修改,删除。

#在字典中新增元素,使用[ ]来进行。
a={
    'id':1,
    'name':'zhangsan'

}
#这个操作就是往字典里插入新的键值对。
a['score']=90
print(a)
#在字典中,使用key修改value,也是使用[ ],来进行的。
a['score']=100
print(a)
#删除键值对,使用pop方法,根据key来删除键值对。
a.pop('name')
print(a)

字典的遍历操作:

遍历指的就是能够把一个可迭代对象,里面包含的元素依次取出来,整个过程要求不重不漏。

字典被设计出来的初衷,不是为了增删改查。

字典是哈希表,进行增删改查操作,效率都是非常高的。(哈希表这个结构,能够以“常数级”时间复杂度来完成增删改查)“常数级”:就是无论字典中有多少元素,新增,修改,删除,操作,都是固定时间,不会因为元素多了,操作就慢了。

而字典的遍历则效率就要差一点。

python中做了特殊处理,能够保证遍历出来的顺序,就是和插入的顺序一致。

python中的字典,又不是一个单纯的哈希表

keys获取到字典中所有的key:(返回的结果,看起来像列表,又不完全是,它是自定义类型,使用的时候也可以把它当做一个列表来使用)

values获取到字典中所有的value。

items获取到字典中的所有键值对。

合法key类型:

不是所有的类型都可以作为字典的key,

字典本质上是一个哈希表,哈希表上的key要求是“可哈希的”,也是可以计算出一个哈希值。

使用hash函数能够计算出一个变量的哈希值。(不可变的对象,一般就是可哈希的,可变的对象,一般就是不可哈希的)

#使用hash函数能够计算出一个变量的哈希值。
print(hash(1))
print(hash('hello'))
print(hash((1,2,3,4)))
#有些类型是不能计算哈希值的。
print(hash([1,2,3]))
print(hash({ }))

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值