Python12_字典

概述

使用键-值(key-value)存储,具有极快的查找速度

key的特征:

  1. key必须唯一
  2. key必须是不可变的对象(字符串、整数等是不可变的,可以作为key,list是可变的,不可作为key,通常使用字符串)
  3. 字典是无序的(在大多数语言中,字典都是无序的)

思考:保存多为学生的姓名与成绩

如果用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]))

copy

a = {"name":"zhang3","age":23,"children_ages":[11,22]}
b = a.copy()
print(a)
print(b)
a["children_ages"].append(33)
print(a)
print(b)

"""运行结果如下:
{'name': 'zhang3', 'age': 23, 'children_ages': [11, 22]}
{'name': 'zhang3', 'age': 23, 'children_ages': [11, 22]}
{'name': 'zhang3', 'age': 23, 'children_ages': [11, 22, 33]}
{'name': 'zhang3', 'age': 23, 'children_ages': [11, 22, 33]}
"""

字典中的value值并不在字典里面存着,而是存的引用,当.copy时,value是共用的

list VS. dict

dict

  1. 查找和插入的速度极快,不会随着key-value的增加而变慢
  2. 需要占用大量的内存,内存浪费多(因为要存储key)

list

  1. 查找和插入的速度对着数据量的增多而减慢
  2. 占用空间小,浪费内存少

#小练习

看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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值