资源简介 (共51张PPT)第4章 字典与集合Chap4 Dictionary and Set字典与集合ADictionary字典BSet集合字典4.1字典与集合为什么要使用字典?salaries['Lilin']>>>names = ['Mayue','Lilin','Wuyun']>>>salaries= [3000, 4500, 8000]>>>print(salaries[names.index('Lilin')])4500Source某公司人事部门让技术部门用Python构建一个简易的员工信息表,包含员工的姓名和工资信息。根据信息表查询员工Linlin的工资。字典什么是字典 ——一种映射类型键(key)值(value)key-value对键是唯一的:数字字符串元组字典aInfo= {'Mayue': 3000,'Lilin': 4500,'Wuyun': 8000}字典中的元素是无序的keyvalue'Mayue'3000'Lilin'4500'Wuyun'8000>>>sorted(aInfo)['Lilin', 'Mayue', 'Wuyun']Source4.1.1创建字典字典与集合创建字典>>>aInfo= {'Mayue': 3000,'Lilin': 4500,'Wuyun': 8000}Source直接创建创建字典>>>info = [('Mayue', 3000), ('Lilin', 4500), ('Wuyun', 8000)]>>>bInfo=dict(info)>>> print(bInfo){'Lilin': 4500, 'Wuyun': 8000, 'Mayue': 3000}>>>cInfo=dict([['Mayue', 3000], ['Lilin', 4500], ['Wuyun', 8000]])>>>dInfo=dict(Mayue= 3000,Lilin= 4500,Wuyun= 8000)>>>eInfo=dict((('Mayue', 3000), ('Lilin', 4500), ('Wuyun', 8000)))Source用dict()函数创建创建字典>>>gInfo= {}.fromkeys(('Mayue','Lilin','Wuyun'), 3000)>>>print(gInfo){'Lilin': 3000, 'Mayue': 3000, 'Wuyun': 3000}Source用方法fromkeys(seq[, value])创建创建员工信息表时将所有员工的工资默认值设置为3000生成字典>>>names =['Mayue','Lilin','Wuyun']>>> salaries = [3000, 4500, 8000]>>>dict(zip(names,salaries)){'Mayue': 3000, 'Lilin': 4500, 'Wuyun': 8000}Source已知有姓名列表和工资列表,如何生成字典类型的员工信息表?生成字典对于几个公司的财经数据,如何构造公司代码和股票价格的字典?pList= [('AXP', 'American Express Company','78.51'),('BA', 'The Boeing Company','184.76'),('CAT', 'Caterpillar Inc.','96.39'),('CSCO', 'CiscoSystems,Inc.', '33.71'),('CVX', 'Chevron Corporation','106.09')]生成字典对于几个公司的财经数据,如何构造公司代码和股票价格的字典?aDict= {'AXP': '78.51', 'BA': '184.76', 'CAT ': '96.39', 'CSCO': '33.71', 'CVX': '106.09'}算法分析:可用循环将公司代码和股票价格分别append到一个新列表中,再利用zip()和dict()函数将这两个列表转化成字典。4.1.2字典的基本操作字典与集合字典的基本操作键值查找字典更新添加元素成员判断删除元素1.键值查找>>>aInfo= {'Mayue': 3000,'Lilin': 4500,'Wuyun': 8000}>>>aInfo['Lilin']4500Source2.字典更新>>>aInfo['Lilin'] = 9999>>>aInfo{'Wuyun': 8000, 'Mayue': 3000, 'Lilin': 9999}Source3.添加元素>>>aInfo= {'Mayue': 3000,'Lilin': 4500,'Wuyun': 8000}>>>aInfo['Liuxi'] = 6000>>>aInfo{'Wuyun': 8000, 'Liuxi': 6000, 'Mayue': 3000, 'Lilin': 9999}Source4.成员判断>>>aInfo= {'Mayue': 3000,'Lilin': 4500,'Wuyun': 8000}>>>'Liuyun'inaInfoFalseSource5.删除元素>>>aInfo= {'Mayue': 3000,'Lilin': 4500,'Wuyun': 8000}>>>delaInfo['Lilin']>>>aInfo{'Mayue': 3000, 'Wuyun': 8000}Source字典的内建函数字典的内建函数dict()len()hash()>>>aInfo = {'Mayue': 3000,'Lilin': 4500,'Wuyun': 8000}>>>len(aInfo)3>>>hash('Mayue')7716305958664889313>>>testList= [1, 2, 3]>>>hash(testList)Traceback(most recent call last):File "<pyshell#1>", line 1, in <module>hash(testList)TypeError:unhashabletype: 'list'SourceHash()函数判断对象是否可哈希,‘Mayue’是不可变的字符串可哈希,testList是可变的列表,不可哈希。字典方法字典方法>>> aInfo ={'Mayue':3000,'Lilin': 4500,'Wuyun': 8000}>>>aInfo.keys()dict_keys(['Mayue', 'Lilin', 'Wuyun'])>>>aInfo.values()dict_values([3000, 4500, 8000])>>>aInfo.items()dict_items([('Mayue', 3000), ('Lilin', 4500), ('Wuyun', 8000)])Sourcekeys()values()items()字典方法>>>aInfo= {'Mayue': 3000,'Lilin': 4500,'Wuyun': 8000}>>>print(aInfo.get('Qiqi'))None>>>print(aInfo.get('Lilin'))4500Sourceget()可以返回键对应的值,无则返回none字典方法>>> stock = {'AXP':78.51,'BA': 184.76}>>> stock['AAA']Traceback (most recent call last):File "<stdin>", line 1, in <module>KeyError: 'AAA'Source下面两个程序都通过键查找值,区别在哪里?你更喜欢哪一个??>>> stock = {'AXP':78.51,'BA': 184.76}>>>print(stock.get('AAA'))NoneSource索引键值:因为AAA在字典不存在所以回直接报错get()方法返回none字典方法>>> aInfo= {'Mayue': 3000,'Lilin':4500,'Wuyun': 8000}>>> aInfo.setdefault('Lilin',None)#与aInfo.get('Lilin')和aInfo.setdefault('Lilin')效果一样4500>>> aInfo.setdefault('Jinhe',None)#与aInfo.setdefault('Jinhe')效果一样>>> aInfo.setdefault('Qiqi', 8000)8000>>>aInfo{'Jinhe': None,'Lilin':4500, 'Mayue': 3000, 'Qiqi': 8000, 'Wuyun': 8000}Sourcesetdefault()字典方法>>> aInfo ={'Mayue':3000,'Lilin': 4500,'Wuyun': 8000}>>>aInfoBackup=aInfo.copy()>>>aInfoBackup{'Mayue': 3000, 'Lilin': 4500, 'Wuyun': 8000}Sourcecopy()Copy方法可以获得字典的一个副本字典方法>>> aInfo ={'Mayue':3000,'Lilin': 4500,'Wuyun': 8000}>>>aInfo.pop('Lilin')4500>>>aInfo{'Mayue': 3000, 'Wuyun': 8000}Sourcepop()返回键对应的值同时将该键值对在字典中删除字典方法>>> aInfo ={'Mayue':3000,'Lilin': 4500,'Wuyun': 8000}>>>aInfo.clear()>>>aInfo{}Sourceclear()清空字典字典方法>>>anfo={}>>>bInfo= {'Mayue': 3000,'Lilin':4500,'Wuyun': 8000}>>>aInfo.update(bInfo)>>>aInfo{'Mayue': 3000, 'Lilin': 4500, 'Wuyun': 8000}>>>cInfo= {'Mayue': 4000,'Wanqi':6000,'Lilin': 9999}>>>aInfo{'Mayue': 3000, 'Lilin': 4500, 'Wuyun': 8000}>>>aInfo.update(cInfo)>>>aInfo{'Mayue': 4000, 'Lilin': 9999, 'Wanqi': 6000, 'Wuyun': 8000}Sourceupdate()添加字典的键值对,也可更新已有键的值字典方法简单应用已知有员工姓名和工资信息表{'Wangdachui':3000,'Niuyun':2000,'Lilin':4500,'Tianqi':8000},如何单独输出员工姓名和工资金额??>>> aInfo = {'Wangdachui': 3000,'Niuyun': 2000,'Lilin': 4500,'Tianqi': 8000}>>>aInfo.keys()['Tianqi', 'Wangdachui', 'Niuyun','Lilin']>>>aInfo.values()[8000, 3000,2000, 4500]Source字典方法简单应用>>> aInfo = {'Wangdachui': 3000,'Niuyun': 2000,'Lilin': 4500}>>> bInfo = {'Wangdachui': 4000,'Niuyun': 9999,'Wangzi': 6000}>>>aInfo.update(bInfo)>>> aInfo{'Wangzi': 6000,'Lilin':4500, 'Wangdachui': 4000, 'Niuyun': 9999}Source人事部门有两份人员和工资信息表,第一份是原有信息,第二份是公司中有工资更改人员和新进人员的信息,如何处理可以较快地获得完整的信息表??集合4.2字典与集合集合>>> names = ['Wangdachui','Niuyun','Wangzi','Wangdachui','Lilin','Niuyun']>>>namesSet=set(names)>>>namesSet{'Wangzi', 'Wangdachui', 'Niuyun','Lilin'}Source人事部门的一份工资信息表登记时由于工作人员的疏忽有部分姓名重复登记了,如何快速解决这个问题??集合什么是集合 一个无序不重复的元素的组合可变集合(set)不可变集合(frozenset)去重集合经常用来去重操作集合>>>aSet= {1, 2, 3}>>>names = ['Mayue','Lilin','Wanqi','Mayue','Lilin']>>> names['Mayue', 'Lilin', 'Wanqi', 'Mayue', 'Lilin']>>>nameset=set(names)>>>nameset{'Mayue', 'Wanqi', 'Lilin'}>>>type(nameset)<class 'set'>Source集合的创建>>> aSet =set('hello')>>> aSet{'h', 'e', 'l','o'}>>>fSet=frozenset('hello')>>>fSetfrozenset({'h', 'e', 'l','o'})>>>type(aSet)<class'set'>>>>type(fSet)<class'frozenset'>Source大括号Set()函数创建可变集合。Frozenset创建不可变集合集合的基本操作集合的基本操作>>> aSet =set('sunrise')>>> bSet =set('sunset')>>>'u'inaSetTrue>>> aSet == bSetFalse>>> aSet < bSetFalse>>> set('sun') < aSetTrueSource数学符号Python符号 in not in===≠!= < <= > >=标准类型运算符集合运算符集合的基本操作>>> aSet =set('sunrise')>>> bSet =set('sunset')>>> aSet &bSet{'u', 's', 'e','n'}>>> aSet | bSet{'e', 'i', 'n', 's', 'r', 'u','t'}>>>aSet-bSet{'i', 'r'}Source数学符号Python符号∩&∪|-或\-Δ^集合类型运算符运算符可复合&= |= -= ^=>>> aSet =set('sunrise')>>> bSet =set('sunset')>>>aSet ^ bSet{'i', 'r','t'}>>>aSet-=set('sun')>>> aSet{'e', 'i','r'}Source面向所有集合集合内建函数>>>aSet =set('sunrise')>>> bSet =set('sunset')Sourceissubset(t)issuperset(t)union(t)intersection(t)difference(t)symmetric_difference(t)copy()面向所有集合>>>aSet.issubset(bSet)#判断aset是否bset子集False>>>aSet.intersection(bSet)#交集{'u', 's', 'e','n'}>>>aSet.difference(bSet)#属于aset不属于bset{'i','r'}>>>aSet.symmetric_difference(bSet){'i', 't', 'r'}>>>cSet=aSet.copy()>>>cSet{'s', 'r', 'e', 'i', 'u', 'n'}Source面向可变集合集合内建函数>>>aSet =set('sunrise')>>>aSet.add('!')>>> aSet{'!','e', 'i', 'n', 's', 'r','u'}>>>aSet.remove('!')>>> aSet{'e', 'i', 'n', 's', 'r','u'}>>>aSet.discard('a')>>>aSet{'s', 'u', 'e', 'i','r', 'n'}Source面向可变集合>>>aSet.remove('a')Traceback(most recent call last):File "<pyshell#4>", line 1, in <module>aSet.remove('a')KeyError: 'a'>>>aSet.update('Yeah')>>> aSet{'a', 'e', 'i', 'h', 'n', 's', 'r', 'u','Y'}>>>aSet.clear()>>> aSetset()Sourceadd()用来添加成员如果删除的对象不存在remove()会产生异常,discard()不会aSet.update()返回的所有成员并集的集合Clear()清空集合小结字典集合 展开更多...... 收起↑ 资源预览