Python其实很简单 第十章 字典与集合

Python010

Python其实很简单 第十章 字典与集合,第1张

前面介绍的列表和元组都是有序序列,而字典与集合属于无序序列,也就是说,不能通过索引来操作元素

10.1 字典

语法格式:

dictionary= {key1 : value1, key2 : value2, key3 : value3 ,...., key n : value n }

其中,dictionary是字典名称,key表示元素的键,value表示元素的值,键和值必须是成对的。

如:

>>>dict1 = { 'abc': 123, 98.6: 37 }

>>>dict1

{'abc': 123, 98.6: 37}

可以看出,键可以是字符串、数字或者元组,但必须是唯一的;而值可以是任何数据类型,也没有要求是唯一的。

1、创建字典的方法

方法一:同时给定键和值,即“关键字参数”形式。

dictionary=dict(key1=value1,key2=value2,.....,key n=value n)

注意:这里的key 必须符合Python标识符的命名规则。

例:

先使用“{}”创建字典:

>>>dict1={1:'一',2:'二',3:'三',4:'四',5:'五'}

>>>dict1

{1: '一', 2: '二', 3: '三', 4: '四', 5: '五'}

再通过“关键字参数”形式创建:

>>>dict1=dict(1='一',2='二',3='三',4='四',5='五')

SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

创建不成功,原因在于key 不符合Python标识符的命名规则。前面已经介绍过,标识符不能用数字表示或者用数字打头。

现在对键如下修改:

>>>dict1=dict(n1='一',n2='二',n3='三',n4='四',n5='五') #在数字前加了一个字符”n”

>>>dict1

{'n1': '一', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五'}

方法二 :使用已经存在的元组和列表通过映射函数创建字典。

格式:dictionary=dict(zip(tuplekey,listvalue))

例:

>>>tuplekey=('n1','n2','n3','n4','n5') #键的序列采用元组

>>>listvalue=['一','二','三','四','五'] #值的序列采用列表

>>>dict1=dict(zip(tuplekey,listvalue))

>>>dict1

{'n1': '一', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五'}

注意:tuple(listname)函数可以将列表转换为元组,list(tuplename)函数可以将元组转换为列表。

2、通过键访问字典

直接获取键的相应元素的值

>>>dict1['n2']

'二'

利用get()方法

>>>dict1.get('n2')

'二'

get()方法也可以带参数,当要访问的键不存在时返回一个字符串。如:

>>>dict1.get('n0','can't find!') #当要查找的键不存在,返回'can't find!'

"can't find!"

3、遍历字典

使用字典对象的items()方法可以获取字典的“键.值对”列表。

>>>for item in dict1.items():

print(item)

('n1', '一')

('n2', '二')

('n3', '三')

('n4', '四')

('n5', '五')

也可以获取具体的每个元素的键和值,如:

>>>for key,value in dict1.items():

print(key,'对应的是',value)

n1 对应的是 一

n2 对应的是 二

n3 对应的是 三

n4 对应的是 四

n5 对应的是 五

4、添加、修改和删除字典元素

使用下面的语句,若指定的键存在,就可以修改该元素的值;若指定的键不存在,则添加该元素。如:

>>>dict1['n6']='六' # 键’n6’不存在,故添加该元素

>>>dict1

{'n1': '一', 'n2': '二', 'n3': '三', 'n4': '四', 'n5': '五', 'n6': '六'}

>>>dict1['n4']='肆' # 键’n4’存在,故修改该元素

>>>dict1

{'n1': '一', 'n2': '二', 'n3': '三', 'n4': '肆', 'n5': '五', 'n6': '六'}

5、利用推导式建立字典

import random

dict1={i:random.randint(1,100) for i in range(5)}

# 生成元素的键为0到5整数,值为1到100之间的随机数

print(dict1)

运行结果:{0: 28, 1: 59, 2: 79, 3: 30, 4: 88}

10.2 集合

集合是数学中一个很重要的概念,集合具有确定性、互异性、无序性三个基本属性。在Python中,集合同样具有这三个基本属性,其中,确定性是指对象要么是集合的元素,要么不是集合的元素;互异性是指集合中的元素不能重复;无序性是指集合中的元素不分先后次序,可以随意更换位置。

1、集合的创建

直接使用“{}”创建

>>>set1={'春','夏','秋','冬'}

>>>set1

{'秋', '春', '冬', '夏'}

>>>set2={3,2,1,4,5}

>>>set2

{1, 2, 3, 4, 5}

利用已有的列表、元组创建集合

>>>list1=['东','南','西','北']

>>>set3=set(list1)

>>>set3

{'南', '东', '北', '西'}

利用已有的集合建立一个“副本”

>>>set3

{'南', '东', '北', '西'} #set3和set4的值一样

>>>set4=set3

>>>set4

{'南', '东', '北', '西'}

>>>set4.add('中') #给set4添加元素

>>>set4

{'西', '中', '东', '南', '北'} # 这个好理解

>>>set3

{'西', '中', '东', '南', '北'} # 意想不到吧?Set3为什么会发生变化?

再看看简单变量的情况:

>>>a=2

>>>b=a #是不是与前面set4=set3相似

>>>b+=1

>>>b

3

>>>a

2 #但a的值并没有发生改变

从上面集合set3、set4和简单变量a、b的值的变化情况对比,不难发现set3和set4是指向同一地址的对象,而变量a和变量b指向了不同地址,语句b=a是将a的值传递个b,并不是将a的地址传递给b。列表、元组、字典都和集合一样具有这样的性质。

所以,将set4称为set3的“副本”更为恰当。

2、添加和删除元素

>>>set3

{'南', '东', '北', '西'}

>>>set3.add('中') # 添加元素

>>>set3

{'西', '中', '东', '南', '北'} # 集合内的元素是无序的,不要纠结次序的变化

>>>set3.remove('中') # 删除元素

>>>set3

{'西', '东', '南', '北'}

3、集合运算

集合运算包括交(&)、并(|)、差(-),和数学中的集合运算是一致的。

>>>set3={'南', '东', '北', '西'}

>>>set4={'西', '中', '东', '南', '北'}

>>>set3 &set4 #取set3和set4的交集

{'西', '南', '北', '东'}

>>>set3 | set4 #取set3和set4的并集

{'中', '南', '北', '西', '东'}

>>>set3 - set4 #取set3与set4的差,即set3比set4多出来的元素

set()

>>>set4 -set3 #取set4与set3的差,即set4比set3多出来的元素

{'中'}

Python中有六个标准的数据类型:Number(数字),String(字符串),List(列表),Tuple(元组),Set(集合),Dictionary(字典)。其中:Number(数字)、String(字符串)、Tuple(元组)是不可变数据,其余三种是可变数据。

转义字符

输出结果

布尔值

布尔值是一个逻辑值,只有真(True)和假(False)

输出结果

Python数据结构包括列表(list)、元组(tuple)、集合(set)、字典(dict)等,这里主要讲解列表,列表有两个特点:

输出结果

修改表中元素

输出结果

列表中插入元素

输出结果

输出列表中的元素

输出结果

元素是否在列表元素中及统计个数

输出结果

查找某个元素在列表中的位置

输出结果

顺序结构

输出结果

if 条件 1

输出结果

if 条件 2

输出结果

循环结构

输出结果

循环语句求和

输出结果

可重复,类型可不同。 类型不同也是跟数组最本质的区别。 python里的列表用“[]”表示: 

对比a和b的结果

列表的 --- 增 -- 删 -- 改 -- 查

循环输出列表内容,在结尾添加指定的内容

字符串是 Python 中最常用的数据类型。 我们可以使用引号('或")来创建字符串。

元组与列表相似,不一样之处在于 元组的元素不能修改。

元组使用小括号,列表使用方括号。

元组建立很简单,只须要在括号中添加元素,并使用逗号隔开便可。

字典是另外一种可变容器模型,且可存储任意类型对象。

字典的每一个键值(key=>value)对用冒号(:)分割,每一个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式以下所示:

d = {key1 : value1, key2 : value2 }

字典函数

集合(set)是一个 无序的不重复元素序列。

可使用大括号 { } 或者 set() 函数建立集合,注意:建立一个空集合必须用 set() 而不是 { },由于 { } 是用来建立一个空字典。

它的主要做用以下: 1.去重,把一个列表变成集合,就自动去重了 。2.关系测试,测试两组数据以前的交集、差集、并集等关系。

关系测试

输出结果

元素的添加和删除

列表[] 用中括号来表示,比如listA=[1,3,4,4,5,6,3,3]

列表支持切片操作。可以用下标取值。listA[0] ==1

元组一经创建就不可以做添加删除等修改操作,但是两个元组可以合并,取交集,并集等

a=(2,4,4,54,35,1,435)   元组支持切片操作 a[3]=54

集合用大括号表示,里面的元素不可重复 b={3,5,6,1,9,61,33,54}

集合是无序的,不支持切片操作,不能用下标取值

取值用b.pop()

大括号表示,dica={"ss":"you","dd":"me"}

取值用key  dica["dd"]==“me”