python dict遍历_Python内置类型之字典序列

专注统计和Python学习分享

点击上面的statspy关注一下吧

Python内置类型之集合&字典

e8150d5887eb8df54ece630f0fa65d6f.gif

文章导读

集合与字典只是在基础部分提到,它们的基本创建方法,没有细说它们的一些方法,毕竟是可变数据类型,肯定是有增删改查的操作。在这里,你会了解到集合与字典的常用方法,以及应用场景。

32cd8c64ded52e6f5ab0ad66d89dcee4.gif

一、集合的方法

Python集合基本支持所有数学上的集合的一些性质和运算法则,交并差补

前面也说到过,集合的创建方式有:构造函数set()创建,字面量{},以及集合推导式,也就基本这三种了。

集合的方法,其实,集合虽然不是序列类型,但是也有一些和共性序列类型数据相同的操作符,比如:in , not in等,还有计算集合元素个数的内置函数len(s)等,以下面的代码看看:

s={1,2,3,'s','a'}bool_in='s' in sprint(bool_in)print('集合的元素个数:', len(s))

集合对象对数据的增删改查操作,这里主要讨论添加和删除操作。

往集合里面添加一个元素的方法为:s.add(x),删除的元素的方法有:s.remove(x), s.discard(x), s.clear(), s.pop()其中的.clear(), .pop()列表也有,其实字典也有,.remove()方法字典没有。看看吧:

s={1,2,3,'s','a'}s.add(4)print('集合的所有元素为:', s)s.remove('a') # 如果元素不存在,报错s.discard('s') # 元素存在才删除print('删除元素后的集合为:', s)s.clear()print('集合元素清空:', s)

de12e8c0ac94204ed9acedab3bd8930e.png

集合和列表一样,是一个大杂烩,各种数据类型都是可以存储的。

集合的运算有:交并差补,其实在Python的集合中没有现有的补集运算方法,为什么呢?因为补集是可以转换为差运算的,所以主要是交并差运算。

运算方法和操作符含义说明
union(x) 或者|集合之间取并集,返回新集合
intersection(x) 或者 &集合之间取交集,返回新集合
difference(x) 或者 -集合之间取差集,返回新集合
issubset(x) 或者 <=或者<判断一个集合是否为另一个集合的子集
issuperset(x) 或者 >= 或者 >判断一个集合是为另一个集合的超集(”父集“)
update(x) 或者 |=更新集合,取并集赋值给原集合
intersection_update(x) 或者 &=更新集合,取交集赋值给原集合
difference_update(x) 或者 - =更新集合,取差集赋值给原集合

以实际的代码来看看:

s1={1,2,3,5,6}s2={1,3,4,8,5}s3={1,3,4}print('并集为:', s1 | s2)print('交集为:', s1 & s2)print('差集为:', s1 - s2)print('s3是否为s1的子集:', s3 <= s1)print('s3是否为s2的子集:', s3 <= s2)

75dd505af8dd15c40d614dbb1b730fa2.png

至于补集的求解,需要按照数学公式来求解,再一个补集,需要涉及到全集的概念,所以全集是不知道的,可能正是这一点,Python没有补集的求解。

32cd8c64ded52e6f5ab0ad66d89dcee4.gif

二、字典的方法

字典是一个映射类型mapping,和数学中的映射的概念是一样的,是映射中的单射

一个键key,只能对应一个值value,但是一个值,value可以对应多个键key,这是一个从key集合到value集合的单射。

字典的创建方法,最多的是使用字典构造函数dict()。它的传参参数类型有三种,分别是关键字,mapping映射类型以及可迭代类型作为参数。一起来看看吧:

lst1=[(k,v) for k in list('abcd') for v in range(1,5)] # 可迭代参数给dict时,键之间会发生覆盖lst2=[(k,v) for k,v in zip(list('abcd'), range(1,5))] print(dict(lst2))dic=dict(name='Andy', age=20, Address='qq.com')print(dic)

644e618c33171e47b4c44f70ea604cad.png

使用zip函数来构建的一个元组对,再通过解包赋值给一个元组,用列表推导式的方式构建。使用dict函数就可以构造字典。

字典也是一个可变数据类型,增删改的操作是不可少的,字典元素的增加操作,直接以键值对的方式赋值即可,这一点和列表是不同的,列表是不可以用索引下标赋值,只能修改。

字典元素的删除操作是使用关键字del即可,以键值对的形式删除。

所有字典的键值对删除可以使用.clear()方法,popitem()从字典的最后弹出一个键值对。

字典的修改操作,直接使用键值对的方式对已经存在的key赋值即可。查找的方式,都是按照键key来查找,有两种不同的表达:一个是d[key]索引的方式,一个是d.get(key[,default])方法获取值,前者如果没有找到报错,后者可以设置一个默认值,没有找到返回默认值即可。

dic=dict([(k,v) for k,v in zip(list('abcd'),range(1,5))])print(dic['a'])print(dic.get('e',0))print('字典的长度为:', len(dic))print('键值对e-0是否在其中?', 'e' in dic) # 以键的方式判断in即可dic['e']=0 # 增加元素print(dic)dic['e'] = 10 # 修改操作del dic['e'] # 删除k,v=dic.popitem() # 弹出最后一个键值对print('key:{},value:{}'.format(k,v))dic.clear() # 全部清除元素print(dic)

ee52271b1bed7a5c93c5f776f345e82c.png

字典重要的增删改查就是上面这些了。

字典还有三个特殊的对象,称之为视图对象(我翻译的)viewobject。

分别是:d.keys()、d.values(),d.items() ,它们都是可迭代对象,也就是说可以用for循环来遍历,这三者的含义分别是:返回键视图对象,值视图对象,键值对视图对象

之所以叫做视图对象,是因为它们会随着字典的增删改操作而发生变化。一般直接对字典进行遍历,是对键的遍历,类似这种:

dic={'one': 1, 'two': 2, 'three': 3, 'four': 4}print(dic.keys()) # 注意它们不是列表print(dic.values())print(dic.items())for key in dic:    print(key, end='\t')print()for value in dic.values():    print(value, end='\t')print()for k,v in dic.items():    print(k,v,sep=': ')

d49e30add3e0b6bbcce233fba23d5516.png

这也是遍历字典的三种方式,非常常用。

内置数据类型之字典集合完结!

END

部分图片|来自网络

—如果喜欢,快分享给你的朋友们吧—

我们一起愉快的玩耍吧

8992f0b65c1ead113d7a9a1715cafaa2.png

往期回顾

更多精彩

Python内置类型之文本序列

Python内置类型之序列

Python内置类型之数值型

关注我们,扫码了解一下吧

c108cd1b20a8e26321364d8553fe0592.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值