概述
使用键-值(key-value)存储,具有极快的查找速度
key的特征:
- key必须唯一
- key必须是不可变的对象(字符串、整数等是不可变的,可以作为key,list是可变的,不可作为key,通常使用字符串)
- 字典是无序的(在大多数语言中,字典都是无序的)
思考:保存多为学生的姓名与成绩
如果用list
`[[“Tome”,93],[“Jack”,45]]
使用字典:学生姓名作为key,成绩作为值
dict1 = {"Tome":60,"lilei":70}
ps:字典可以只有key而没有value
元素的访问
获取
格式:字典名[key],以访问相应key对应的value。如果没有该key,则报错
print(dict1["lilei"]) #输出70
- get(key,defaultValue)
当我们不确定字典中是否存在某个key,而且还要获得其value,可以使用get()
常用
如果没有该key,不报错,返回None
print(dict1.get("sunck"))
print(dict1.get("sunck","1234")) #如果不存在sunck键,则返回1234,否则返回sunck的value
添加
dict1["hanmeimei"] = 99
更新
因为一个key对应一个value,所以,多次对一个key的value赋值,则为修改值
dict1["lilei"] = 89
删除
pop(key)
列表中也有pop,如果不指定参数,则删除最后的元素
dict1.pop("Tome")
del
-
删除单个元素
格式:del 字典名[key] -
删除整个字典,删除后整个字典不存在
格式:del 字典名
clear
clear后字典为空,但是字典本身存在
格式:字典名.clear()
遍历
for key in dict1:
print(key,dict1[key]) #遍历的是字典里面的key
for value in dict1.values(): #遍历字典里面的value。dict.values是将dict字典里面的所有value以列表的形式返回
print(value)
for k,v in dict1.items(): #dict.items()是将字典里面的元素以元组的形式返回
print(k,v) #输出key以及对应的value
for i,k2 in enumerate(dict1):
print(i,k2) #i为key在字典里面的序号(从0开始),k2为键值
字典的常用操作
之字典为参数
len()
返回字典中key-value对的个数
格式:len(字典名)
之字典为调用者
keys()
格式:字典名.keys()
获得字典所有的键,以列表的形式
info = {"name":"lisi","age":23}
if "name" in info.keys():
pass
values()
格式:字典名.values()
获取字典所有的值,以列表的形式
items()
格式:字典名.items()
以列表形式返回以元组形式存储的key-value键值对
my_dic={"name":laoli,"age":34}
for tmp in my_dic.items():
print(tmp)
print("key1:%s\tkey2:%s"%(tmp[0],tmp[1]))
list VS. dict
dict
- 查找和插入的速度极快,不会随着key-value的增加而变慢
- 需要占用大量的内存,内存浪费多(因为要存储key)
list
- 查找和插入的速度对着数据量的增多而减慢
- 占用空间小,浪费内存少
#小练习
看substr在str中出现了多少次
#法一:count
str.count(substr)
#法二:字典
Word = input("请输入要查找的单词:\n)
str = "sunck is a good man, sunck is a great man, sunck is a handsome man, sunck is a noble man"
myDic = {}
for i in str.split(" "): #以空格切割字符串,循环处理列表中的每个元素,再以元素当作key去字典中提取数据
v = myDic.get(i) #如果直接myDic[key],当字典中不存在值为key的键时,程序会报错,所以用get
if v == None: #如果没有提取到,就以该元素作为key,1作为value,存进字典
myDic[i] = 1
else:
myDic[i] += 1 #如果提取到了,则将对应的value+1
print(myDic[Word]) #再以该key去字典提取value