python都学不会_没有学不会的python--复合类型(3)--字典和集合

再起步

前面已经用了两个篇幅取描述复合类型,已经把复合类型的基本概念和重要知识点以及元组、列表都描述的很清楚了,核心基本都已经掌握。就还剩下字典和集合,本章就讲讲这两个玩意。

话不多说,直接上菜。我认为字典就类似于南方人中的青菜,虽然吃的不多,但是每顿都不可缺少。字典在python开发中,扮演的角色大都如此。好了,我们开吃吧。

qingcai.jpg

有助消化的青菜--dict即字典

字典的形式:字典是被{}包裹起来的,里面的形式类似如{key1:item1,key2:item2}

为什么会有字典这个东西存在呢?

前面讲到list的时候,我们可以发现列表里面可以存储各种各样的数据,但是,元素只能通过下标进行获取,也就是说,我们没办法建立一个能用于描述现实世界关系的模型。比如:我们认识两个人,一个叫王明:男的,一个叫李丽:女的。如果要用list来描述,我们只能通过类似下面的代码来描述:

# 单独分开描述

names = ["wangming", "lili"]

sex = ["male", "female"]

# 或者用元组描述

friends = [("wangming", "male"), ("lili", "female")]

当我们要获取王明的性别的时候,怎么操作呢,只能先从names里面判断王明所在的下标,再用这个下标去sex里面获取对应的值。这样操作虽然可以达到我们的目的,但是,这样存在很大的问题:

效率非常低,由于list获取值是循环获取,每次取值都要从头到尾来一遍,如果列表非常长,效率可想而知。

很隐晦,代码不好理解,如果是别人写的上面一串代码,你看得出来names和sex是有关联的吗?

通过下标获取某个对象的属性,本来可以直接通过对象获取属性的,为啥还要通过下标获取对象再来获取属性?

容易乱,前面提到list是可变对象,万一你names中间插了个谁,sex没有插或者插错位置了,岂不是所有人的性别都错乱了。

于是乎,就产生了dict这个东西,用于描述显示生活中有关联的两个值。其中用来索引的叫做key,用来存储对应值的叫做value。

dict相比list,有什么不同?

dict的查找效率更高,因为它有key。就好比我们翻书,dict是有目录的,我们要查找某部分内容,只要通过目录就可以快速定位。list相当于目录丢失的书,我们要查找内容只能一页页去翻了。

dict更耗空间,因为要维护key,所以存储空间就多。这也是编程中常用的空间换时间的方法。

dict除了可以通过下标去获取元素,还能通过key去获取。

dict的key必须是不可变对象,因为我们的key是对应的value的,你想想如果是可变对象,那么还能key-value还能是固定的关系么?dict的常用函数

切记,常用函数不是给你背的,是给你理解和使用的。用的多了自然就知道了,别拿读书那套来学习编程。

假设有一个dict对象叫d,那么它有以下用法

d.clear() ---清楚dict的所有元素。

d.copy() ---返回d的浅拷贝

d.get(k) ---获取d中跟k相关联的值

d.get(k,v) ---获取d中跟k相关联的值,如果没有就返回v。

d.items() ---一般用于迭代字典的所有元素,返回的形式是(key,value)

d.keys() ---用于返回d中的所有key。

d.values() ---用户返回d中的所有值。

到这里dict的核心概念以及常用函数基本都有了理论基础,下面通过代码实践一下。

dict的初始化

# 字典的初始化

# 直接用{key1:item1}的形式初始化

friends_1 = {"liming": "male", "lili": "female"}

# 用列表初始化,但是列表的每个项必须含有两个元素

friends_2 = dict([("liming", "males"), ("lili", "female")])

# 初始化一个空的字典

null_1 = {}

# 或者

null_2 = dict()

具体用哪种,按个人习惯,你用的哪种顺手就哪种。

dict的常用操作

# 添加元素

print("添加元素之前:friends_1是:{0}".format(friends_1))

friends_1["zhangfan"] = "male"

print("添加元素之后:friends_1是:{0}".format(friends_1))

# 修改元素

friends_1["liming"] = "female"

print("修改元素之后:friends_1是:{0}".format(friends_1))

# 删除元素

friends_1.pop("zhangfan")

print("删除元素之后:friends_1是:{0}".format(friends_1))

# 获取某个值

print("王明的性别是:{0}".format(friends_1["liming"]))

# 获取friends_1的所有key

print("friends_1所有key:{0}".format(friends_1.keys()))

# 获取friends_1的所有value

print("friends_1所有value:{0}".format(friends_1.values()))

# 循环dict

for k, v in friends_1.items():

print("{0}的性别是{1}".format(k, v))

# 判断是否含有某个key

if "liming" in friends_1:

print("liming在friends_1里面")

输出结果

添加元素之前:friends_1是:{'liming': 'male', 'lili': 'female'}

添加元素之后:friends_1是:{'liming': 'male', 'lili': 'female', 'zhangfan': 'male'}

修改元素之后:friends_1是:{'liming': 'female', 'lili': 'female', 'zhangfan': 'male'}

删除元素之后:friends_1是:{'liming': 'female', 'lili': 'female'}

王明的性别是:female

friends_1所有key:dict_keys(['liming', 'lili'])

friends_1所有value:dict_values(['female', 'female'])

liming的性别是female

lili的性别是female

liming在friends_1里面

至此,如果你把上面的都消化了,那么字典也就会用了,这盘青菜我们算是吃着了!

zhenxiang.jpg

饭后甜点--set即集合

集合在实际使用中,一般有去重的要求才会用到,否则基本都可以用list代替,所以我称它为饭后甜点,可要可不要,看你心情,想吃就吃点,不想吃也无多大关系,毕竟,不用集合,单纯的list通过一段代码逻辑也可以去重。

但是,上面那段话描述的有问题,set的真实实现类似字典,但是它没有value,类似于字典中的keys。因此,set的元素必须是不可变对象,因为可变对象没办法比较是否相等。

tiandian.jpg

set的形式是{}包裹的,但是不同于字典,它里面是{key1,key2}这样的

set有一个不同的地方,就是它经常用来做集合运算,就是我们数学上的交集,并集之类的。好了关于set的要点基本就这么多。接下来看看set的常用函数,假设我们有一个set的变量名叫s,那么它可以执行这样的操作:

s.add(x) 讲x添加到集合中,如果元素不存在才会添加,如果元素已存在,则不会再添加。

s.clear() 清除集合中的所有元素

s.copy() 对集合进行浅拷贝

s.remove(x) 移除集合中的x元素

s.union(t) 其中s、t皆是集合,此函数讲求得两个集合的并集。

s.intersection(t) 其中s、t皆是集合,此函数将求的两个集合的交集。

以上就是集合的常用函数。下面进行实践操作。

集合的初始化

# 集合的初始化

# 直接用{}初始化

set_1 = {1, 2, 3, 4, 5}

# 使用set()函数

set_2 = set([1, 2, 3, 4, 5])

集合的常用函数

# 添加元素

print("添加元素之前,set_1是{0}".format(set_1))

set_1.add(6)

print("添加元素6之后,set_1是{0}".format(set_1))

set_1.add(6)

print("再次添加元素6,set_1是{0}".format(set_1))

# 获取第2个元素,不可直接对set继续取值,可转换成List再取

list_1 = list(set_1)

print("获取set_1的第二个元素:{0}".format(list_1[1]))

# 移除元素

set_1.remove(3)

print("移除元素3之后,set_1是{0}".format(set_1))

# 利用集合去重

list_2 = [1, 2, 3, 2, 2, 3, 1]

set_2 = set(list_2)

print("list_2是{0}".format(list_2))

print("利用集合去重后得到set_2是{0}".format(set_2))

print("此时set_1是{0}".format(set_1))

print("此时set_2是{0}".format(set_2))

# 对set_1和set_2进行交集

print("set_1与set_2进行交集得到{0}".format(set_1 & set_2))

# 对set_1和set_2进行并集

print("set_1与set_2进行并集得到{0}".format(set_1 | set_2))

# 对set_1和set_2进行并集

print("set_1对set_2进行差集得到{0}".format(set_1 - set_2))

输出结果:

添加元素之前,set_1是{1, 2, 3, 4, 5}

添加元素6之后,set_1是{1, 2, 3, 4, 5, 6}

再次添加元素6,set_1是{1, 2, 3, 4, 5, 6}

获取set_1的第二个元素:2

移除元素3之后,set_1是{1, 2, 4, 5, 6}

list_2是[1, 2, 3, 2, 2, 3, 1]

利用集合去重后得到set_2是{1, 2, 3}

此时set_1是{1, 2, 4, 5, 6}

此时set_2是{1, 2, 3}

set_1与set_2进行交集得到{1, 2}

set_1与set_2进行并集得到{1, 2, 3, 4, 5, 6}

set_1对set_2进行差集得到{4, 5, 6}

以上就是集合的常用函数与运算。到这里,对于复合函数我们就基本掌握了。请大家真心想学的,动动手写写例子。

复合类型的总结

python中往大了说只有四种复合类型,元素列表集合字典。往小了说,还有很多复合类型比如有序字典什么的,作为初学者,我们暂时不需要了解,知道前面四大类就行了。

可变对象和不可变对象的区别在于,可变对象在引用地址不变的情况下,值可以发生改变。

字典的查询效率要比列表高。

除了元组,其他三类都是可变对象。

复合函数有很多函数,我们不要死记硬背,而是结合实践来加深理解。

复合函数除了可以包含简单数据类型之外,也可以包含复合类型。

end.jpg

如果你对我的系列文章感兴趣,可以关注我的公众号:

gongzhonghao.jpg

如果你有什么建议想向我反馈,可以加我:

weixin.png

标签:set,format,python,元素,复合,dict,print,friends,字典

来源: https://blog.csdn.net/qq_25722767/article/details/93635851

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值