dict讲解及增删改查
dict是python中唯一一个映射数据类型,键值对的形式
数据类型划分:
1、可变数据类型:list,dict,set集合
可更改的,为不可哈希
2、不可变数据类型:元组,bool,数字本身,str本身,对数字和字符串的操作,都是新生成,而不是在原基础上的改动
不可更改的,为可哈希
字典dict:key必须是不可变数据类型,可哈希,value值:可任意数据类型
字典它内部有一张哈希表,dict的键都会转换成对应的哈希值,哈希值在内存中存的是数字,然后根据二分查找法查询
dict的优点:查找速度是最快的,储存大量的关系型数据
dict的特点:
1、无序的,(python3.5版本以前)3.6以后可能是有序的
2、无序的,所以它是没有索引的,只能通过键值对去查询
二分查找法:一分为二的查找。
dict的增加
1、根据键增加:如果增加的键是字典里有的,那就是覆盖,如果没有就增加
dic = {
1:'1',
'haha':[{'name':'wenzi','age':18}],
True:1,
(1,2,3):2
}
dic[1] = 'girl' dic['sex'] = 'boy' print(dic)
2、setdefault(key,value),值默认是None,可以指定
特点:如果字典里已经存在这个键,则不作任何添加,没有的话则添加
dic = {
1:'1',
'haha':[{'name':'wenzi','age':18}],
True:1,
(1,2,3):2
}
dic.setdefault('sex','boy') print(dic)
字典的删除
1、pop(键),也是有返回值的,可设置返回值
dic = {
1:'1',
'haha':[{'name':'wenzi','age':18}],
True:1,
(1,2,3):2
}
dic.pop(True) print(dic)
print(dic.pop('name','没有此键')) #如果有此键,打印删除的键,没有此键,则打印后面加的参数
print(dic)
可设置返回值:如果没有这个键,不加参数,是会报错,但是如果加了None或者其他参数,没有键不会做任何操作,有的话就会删除
2、popitem(),3.6以上默认删除最后一个,3.5之前是随机删除,有返回值,返回的是元组的形式(键,值)
dic = { 2:'1', 'haha':[{'name':'wenzi','age':18}], True:'哼', (1,2,3):2 } dic.popitem() print(dic)
3、清空字典,clear
dic.clear()
4、删除del,可以删除键值对,也可以直接删除整个字典。没有此键的话会报错,是没有返回值的,少用
del dic['haha'] #删除键值对
del dic #删除字典
字典的修改
1、通过已有的键覆盖
2、update:已有的键进行覆盖,没有键的进行增加
dic1 = {'name':'seven','age':18}
dic2 = {'name':'wenzi','sex':'girl'}
dic2.update(dic1)
print(dic1)
print(dic2)
字典的查询
1、dic1.keys(),dic1.values(),返回的类型是一种特殊类型,可以当做列表看,跟列表有一样的操作
dic1.items(),返回的也是列表,列表里面是元组,元组里面是键和值
dic1 = {'name':'seven','age':18}
print(dic1.keys(),type(dic1.keys()))
print(dic1.values())
print(dic1.items())
dic1 = {'name':'seven','age':18}
for i in dic1:
print(i)
也可以for循环,dic1后面不加,默认打印出来的是键
ps:分别赋值,会自动识别,看赋值的最小单位,但是必须一一对应
a,b = 1,2
print(a,b)
a,b = [1,2] print(a,b)
a,b = [1,2],[2,3] print(a,b)
a,b = (1,2) print(a,b)
注:通过分别赋值,for循环可同时分别赋值,只打印出键和值
dic1 = {'name':'seven','age':18}
for k,v in dic1.items():
print(k,v)
2、直接查找对应键的值
缺点:没有此键的话会报错
dic1 = {'name':'seven','age':18}
print(dic1['name'])
3、get :有的话返回对应的值,没有的话默认返回None,同样的可以设置返回的值,常用
dic1 = {'name':'seven','age':18}
print(dic1.get('name1'))
print(dic1.get('name1','没有此键'))
变量与所指向内容在内存的逻辑:
内存中有一个名称空间,用于存在变量与对应内容的关系,查找内容,首先通过名称空间,找到对应内容存储在内存中地址,每个内容在内存中都有唯一的内存地址


浙公网安备 33010602011771号