目录
1.字典是什么?
字典是一种存储键值对的结构。
什么是键值对?
在Python的字典中,可以同时包含很多个键值对,同时要求这些键,不能重复。
2.字典的创建
#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 value 的类型不必要都一样,但是对于key的类型有约束。
对于value的类型没有约束。
3. 字典的基本操作
3.1使用in判断某个key是否在字典中存在
#3.使用in来判定某个key是否在字典中存在 a={ 'id':1, 'name':'zhangsan' } print('id' in a) print('classId' in a)
#in只是判断key是否存在,和value无关 print('zhangsan' in a) #not in 来判断key在字典中不存在 print('id' not in a) print('classId' not in a)
3.2使用[ ]来根据key获取到value
#4.使用[ ]来根据key获取到value a={ 'id':1, 'name':'zhangsan', 100:'lisi' } print(a['id']) print(a['name']) print(a[100])
对于字典来说,使用in或者[ ]来获取value(字典背后使用了特殊的数据结构:哈希表),都是非常高效的操作!!!
对于列表来说,使用in比较低效(需要把整个列表遍历一遍),而使用[ ](类似于数组/顺序表取下标)是比较高效的。
4.字典的新增和修改操作
#1.在字典中新增元素,使用[ ]来进行 a={ 'id':1, 'name':'zhangsan' } #这个操作就是往字典里插入新的键值对 a['score']=90 print(a) #2.在字典中,根据key修改value,也是使用[ ]来进行的 a['score']=100 print(a)
如果key不存在,往里写入,相当于新增键值对。
如果key存在,往里写入,则相当于key修改value。
5.字典的删除操作
#3.使用pop方法,根据key来删除键值对 a.pop('name') print(a)
6.字典的遍历操作
遍历指的就是能够把一个可迭代对象,里面包含的元素依次取出来,并进行一些操作,整个过程要求不重不漏。
字典被设计出来的初衷,不是为了实现遍历,而是为了实现增删改查。
字典是哈希表,进行增删改查操作,效率是非常高的,而字典的遍历则效率就要差一些。
哈希表这个结构设计非常巧妙,能够以'常数级'时间复杂度(无论字典有多少元素,新增,修改,查找,删除都是固定时间,不会因为元素多了,操作就慢了)来完成增删改查。
字典中的key不能重复。
6.1使用for循环进行遍历
#1.直接使用for循环来遍历字典 a={ 'id':1, 'name':'zhangsan', 'score':90 } for key in a: print(key,a[key])
6.2取出所有key和value
a={ 'id':1, 'name':'zhangsan', 'score':90 } # for key in a: # print(key,a[key]) print(a.keys()) print(a.values()) print(a.items())
#1.直接使用for循环来遍历字典 a={ 'id':1, 'name':'zhangsan', 'score':90 } for key,value in a.items(): print(key,value)
7.可哈希的类型
在Python中专门提供了一个hash函数,可以计算这个变量的hash值。
#使用hash函数能够计算出一个变量的hash值 print(hash(0)) print(hash(3.14)) print(hash('hello')) print(hash(True)) #元组也可以计算哈希值 print(hash(1,2,3)) #有的类型不能计算哈希值(列表、字典) print(hash([1,2,3]))
也就是列表和字典不可以作为字典的key,其他的类型可以作为字典的key
列表可以通过append操作发生改变,不可计算hash
不可变的对象,一般就是可hash的,可变的对象,一般就是不可哈希的
字典、列表、元组Python中非常常用的内置类型,相比于int,str,float......
他们内部可以再包含其他元素了,可以称为容器/集合类。