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','没有此键'))

 

变量与所指向内容在内存的逻辑:

内存中有一个名称空间,用于存在变量与对应内容的关系,查找内容,首先通过名称空间,找到对应内容存储在内存中地址,每个内容在内存中都有唯一的内存地址

 

posted @ 2021-03-25 22:44  吃啥呦?  阅读(421)  评论(0)    收藏  举报