bool类型返回值_Python基础5/20篇:字典dict,可变数据类型与不可变数据类型

Python基础5/20篇:dict, 可变数据类型与不可变数据类型

来都来了,不关注一下吗??

   今天我们学习基本数据类型之字典 dict, 在讲解之前呢,我需要详细给大家串一下可变数据类型和不可变数据类型,之前有提到过呦4d93298f4682152ac5a5d4bac793f7a4.png4d93298f4682152ac5a5d4bac793f7a4.png

    可变数据类型:当该数据类型对应变量的值发生变化时,对应内存地址并没有开辟新的内存,而是在原来的内存值上进行修改,也可以叫做不可哈希的。(哈希hash是一种算法,知道这种说法即,可不用细究)

    不可变数据类型:当该数据类型对应变量的值发生变化时,原来内存中的值不变,而是会开辟一块新的内存,变量指向新的内存地址。

    可变数据类型有: list  dict  set      (不可哈希)

    不可变数据类型有:tuple,bool,int,str  (可哈希)

    好了有了这些预备知识,我们下面正式进入字典的学习啦0d42aec8a007d7f60ed0b862157de57c.png好好理解哦。

aac6a448b67da06808d892e9c4f2be4f.png

(六)字典 dict

1

初识dic

t

    字典(dict)是python中唯⼀一的⼀一个映射类型,是以{ }括起来的键值对组成。在dict中key是唯⼀一的,在保存的时候, 根据key来计算出⼀一个内存地址, 然后将key-value保存在这个地址中,这种算法被称为hash算法。所以,切记,在dict中存储的key-value中的key必须是可hash的。

    如果你还还还还还搞不懂什什么是可哈希, 暂时可以这样记:可以改变的都是不可哈希的,那么可哈希就意味着不可变。这个是为了能准确的计算内存地址而规定的。

    语法 :{key1: value1, key2: value2....}

    dict 优点 :可以存储大量的关系型数据  

    特点:无序

    !注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据

这是一个dic的示例:

dic = {"name" : ["sissi", "alex"],"info" : [{"num":7, "ave_age":18}],
    True : 1,(1,2,3) : "123",4 : "男神"}print(dic)

输出结果

d3f8586475a3c34ad201bf986b03eb89.png

2

增删改查

(1)增

1)直接加  dic[key] = value   

      【特点:新增加的key不在原dict的是添加,在的话是覆盖】

dic = {"name":"sissi", "age":25}dic["high"] = 170   # 增加一个键值,增加身高为170print(dic)

输出结果

a127c07a663cdccceb4f599caa8b9564.png


如果原字典里有新加的key,则会覆盖,比如

dic = {"name":"sissi", "age":25, "high":170}dic["high"] = 180print(dic)

输出结果

196663771e9e09c4950d3a527ac676f9.png

2)dic.setdefault(key, value)  

      【特点:新增加的key不在原dict的是添加,在的话是保留原值】

dic = {"name":"sissi", "age":25, "high":170}dic.setdefault("weight", 110)   # 没有,添加dic.setdefault("name", "alex")   # 有, 保留原来,不做任何改变print(dic)

输出结果

45a98ee5166e24efe5a6294f09e732eb.png

(2)删 

1)按key删  dic.pop(key)

dic = {"name":"sissi", "age":25, "high":170, "weight":110}dic.pop("age")   # 删除age, 有返回值print(dic)

输出结果

69386044c4950806c4621ed90be85fd8.png

若删除一个不在原列表的key,会报错:

dic = {"name":"sissi", "age":25, "high":170, "weight":110}dic.pop("gender")   # 删除genderprint(dic)

输出结果

e6a455439372359869b349ac758b396f.png

如果我们不想让它报错,可以设置返回值:

dic = {"name":"sissi", "age":25, "high":170, "weight":110}dic.pop("gender", None)   # 删除gender,如果没有则返回Noneprint(dic.pop("gender", None))print(dic)

输出结果

95ce0a8fc77465e48ced2934a8cdf36b.png

再比如:

dic = {"name":"sissi", "age":25, "high":170, "weight":110}dic.pop("gender", "没有此键")   # 删除gender,如果没有则返回没有此键print(dic.pop("gender", "没有此键"))print(dic)

输出结果

b176852729b933d60c4d06b0b1b15e5f.png

2)随机删除  dic.popitem()

      【特点:有返回值,返回值是元组形式,里面是删除的键值】

dic = {"name":"sissi", "age":25, "high":170, "weight":110}dic.popitem()   # 有返回值print(dic.popitem())print(dic)

输出结果

c8f6153c488665c28c6360480e10825a.png

    但是很多同学会质疑,因为发现它总是删除最后一个,在这里辟谣:其实真的是随机删除的,只是我们举例的dic里面包含的键值对比较少,如果字典里面包含大量的键值对,是很可能看到随机删除的,也可以参考python手册哈。541d76396a6ced8b241331e2df3fb548.png

3)清空, dic.clear()

dic = {"name":"sissi", "age":25, "high":170, "weight":110}dic.clear()print(dic)

输出结果

1017b8ceda7c4b71b7e6ca83485a590e.png

4)用del删除  del dic[key]

dic = {"name":"sissi", "age":25, "high":170, "weight":110}del dic["name"]print(dic)

输出结果

b3095a16dbf8278a7e66694023aaa8c7.png

当删除原dic里没有的key则会报错:

dic = {"name":"sissi", "age":25, "high":170, "weight":110}del dic["gender"]print(dic)

输出结果

2cb4af17b08543081c1e9e2f6ab7e77e.png

(3)改

1)直接改  dic[key] = 新value

dic = {"name":"sissi", "age":25, "high":170, "weight":110}dic["age"] = 16   # 把年龄改为16岁print(dic)

输出结果

109f79b046e016f3209ce49219b4c88a.png

2)更新   dic2.update(dic)  把dic放进dic2中,更新dic2

dic = {"name":"sissi", "age":25, "high":170}dic2 = {"name":"alex",  "weight":110}dic2.update(dic)   # 把dic放进dic2print(dic)print(dic2)

输出结果

af35823e942b67901aa4f8719f0209fd.png

从输出结果可以看到,dic并没有变,而dic2变了。本质就是把dic放进dic1里面去,没有的添加,有的覆盖。

(4)查

1)直接打印key, value和键值对

dic = {"name":"sissi", "age":25, "high":170}print(dic.keys())    # 打印所有的keyprint(dic.values())   # 打印所有的valueprint(dic.items())    # 打印所有的键值

输出结果

8583ccdcd885af192d2f1dba592b425f.png

2) 查找key

    打印dic中的key的两种写法:

dic = {"name":"sissi", "age":25, "high":170}for i in dic:    # 打印key    print(i)

或者

dic = {"name":"sissi", "age":25, "high":170}for i in dic.keys():    # 打印key    print(i)

输出结果均为

bac2caaa64eb1ae2e7355f20887144a9.png

3)查找value

dic = {"name":"sissi", "age":25, "high":170}for i in dic.values():    # 打印value    print(i)

输出结果

387b8811c27cdc7522ce86ee97836f73.png

4)查找键值对

dic = {"name":"sissi", "age":25, "high":170}for i in dic.items():    # 打印键值对    print(i)

输出结果

e63cd7fd3424634f5d6c957c19797f59.png

把括号去了:

dic = {"name":"sissi", "age":25, "high":170}for k, v in dic.items():    # 打印键值对    print(k, v)

输出结果

34c6eebbfc480715268caae7eb4c4490.png

6)打印原dic存在的value

  6.1)用key找 dic[key]

dic = {"name":"sissi", "age":25, "high":170}v1 = dic["name"]print(v1)

输出结果

83f24ff392d6672418fa47345d348f7c.png

找不到则会报错:

dic = {"name":"sissi", "age":25, "high":170}v2 = dic["gender"]print(v2)

输出结果

84cce415fa4d0755137afb42d9073a05.png

  6.2)用get找:dic.get(key)

dic = {"name":"sissi", "age":25, "high":170}v1 = dic.get("name")print(v1)

输出结果

7c3bef4aa75f31d7207cac4dff429d51.png

找不到则返回None:

dic = {"name":"sissi", "age":25, "high":170}v2 = dic.get("gender")print(v2)

输出结果

557bef3230280c86215df4617a41c9b2.png

3

嵌套

字典的嵌套其实和列表非常相似,本质上就是根据它们各自的性质,一层一层看!

比如我的原dic为:

dic = {"name": "joy","info" : {"age" : 31,"gender" : "male","children" : ["alex", "volia"]
    }
,"money" : 2000
}

1)现在我想把money改成3000:

# 把money改成3000dic["money"] = 3000print(dic)

输出结果

cffc137ec1559ba9a3be8d46786e88dd.png

2)age改成35

# 把age改成35dic["info"]["age"] = 35print(dic)

首先要从info里面取出age,再从age里面取出35:

afd6d6cff613e06f7fa2c696e83dff92.png

3)在info里面添加一个wife的信息

# 在info里面添加一个wife的信息dic["info"]["wife"] = "女神"print(dic)

同样的,首先先要找到info,再添加信息:

1daa8ffbe8a18d40f9fc513e78dee8c8.png

4)把children中的volia大写

# children中的volia大写dic["info"]["children"][1] =dic["info"]["children"][1].upper()print(dic)

首先从info中找到children,是一个列表形式,volia的index是1,按索引取出:

5986e4c61c076bdd7b3e2a167928b686.png

 ~~  今天的内容很重要哦    ~~ 

0435bbbf263291f242647730a6ba8c84.png

记得关注喵~~

818d64047c4736f3eac7dd94925362f0.png

留言板

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值