元组
元组简介
• 元组表现形式tuple
• 元组是一个不可变序列(一般当我们希望数据不改变时,我们使用元组,其他情况下基本都用列表)
• 使用()创建元素
tuple1=() #定义一个元组
• 元组不是空元组至少有一个 逗号(,) 当元组不是空元组时括号可以省略
tuple1=(1)
tuple2=(1,) # 元组不是空元组至少有一个逗号','
tuple3=1,2 # 元组不是空元组时括号可以省略
print(type(tuple1))
print(type(tuple2))
print(type(tuple3))
结果:
<class 'int'>
<class 'tuple'>
<class 'tuple'>
• 元组解包指将元组当中的每一个元素都赋值给一个变量
tuple1=(1,2,3,4)
a,b,c,d=tuple1
print(a,b,c,d)
结果:
1 2 3 4
tuple1=(1,2,3,4)
a,b,c,d,e=tuple1
print(a,b,c,d,e)
结果: 拆包后的数量应与元组中元素的个数一致。
Traceback (most recent call last):
File "<input>", line 2, in <module>
ValueError: not enough values to unpack (expected 5, got 4)
• 当拆包后的元素小于元组长度时,用*号将多余的元素放在一个 对象中
tuple1=(1,2,3,4)
... a,*b=tuple1
... print(a,b)
结果:多个元素拆包为list
1 [2, 3, 4]
字典
字典简介
字典的基本介绍
• 字典属于一种新的数据结构称为映射(mapping)
• 字典的作用和列表类似,都是用来存储对象的容器
• 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反
• 在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以找到指定的元素
• 这个唯一的名字我们称之为key 通过key可以快速查询value 也可以称之为值
• 字典我们也称之为键值对(key-value)结构
• 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
• 创建一个有数据的字典 语法 {key:value}
• 字典的键可以是任意的不可变对象(int str bool tuple....)
• 字典的值可以是任意对象
• 字典的键是不能重复的,如果出现重复的后面的会替换前面的
字典的使用
• dict()函数来创建字典
dic1={}
dic1=dict(name='刘亦菲',sex='female')
print(dic1,'\n',type(dic1))
{'name': '刘亦菲', 'sex': 'female'}
<class 'dict'>
• 双值子序列
list1=[('name','刘亦菲'),('sex','female')]
dic1=dict(list1)
print(dic1)
结果:
{'name': '刘亦菲', 'sex': 'female'}
• get(key[,default]) 根据键来获取字典的值。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
dic1={'name':'刘亦菲','sex':'female','height':'170'}
print(dic1['name'])
print(dic1.get('name','保密'))
print(dic1.get('age','保密'))
结果:
刘亦菲
刘亦菲
保密
• 添加setdefault(key,value):
如果key已存在,则返回value,不影响字典
如果key不存在,则在最后添加一个key-value
dic1={'name':'刘亦菲','sex':'female','height':'170'}
res1=dic1.setdefault('age',18)
res2=dic1.setdefault('sex','male')
print(dic1)
结果:
{'name': '刘亦菲', 'sex': 'female', 'height': '170', 'age': 18}
• update() 将其他字典的key-value添加到当前的字典当中
dic1={'name':'刘亦菲','sex':'female','height':'170'}
dic2={'age':'20'}
dic1.update(dic2)
print(dic1)
结果:
{'name': '刘亦菲', 'sex': 'female', 'height': '170', 'age': '20'}
• del 删除字典中指定的key-value
dic1={'name':'刘亦菲','sex':'female','height':'170'}
del dic1['sex']
print(dic1)
结果:
{'name': '刘亦菲', 'height': '170'}
• popitem() 删除字典最后的一个key-value 这个方法是有返回值的。删除之后它会将删除的key-value作为返回值返回
dic1={'name':'刘亦菲','sex':'female','height':'170'}
res=dic1.popitem()
print(dic1)
print(res)
结果:
{'name': '刘亦菲', 'sex': 'female'}
('height', '170')
• pop(key[,default]) 根据key删除自定中的value。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
dic1={'name':'刘亦菲','sex':'female','height':'170'}
dic1.pop('height')
print(dic1)
结果:
{'name': '刘亦菲', 'sex': 'female'}
•copy() 方法用来对字典进行浅复制
import copy
dic1={'name':'刘亦菲','sex':'female','height':'170'}
dic2=copy.copy(dic1)
dic3=copy.deepcopy(dic1)
print(dic2)
print(dic3)
print('字典1的id是:',id(dic1),'\n字典2的id是:',id(dic2),'\n字典3的id是:',id(dic3))
结果:
{'name': '刘亦菲', 'sex': 'female', 'height': '170'}
{'name': '刘亦菲', 'sex': 'female', 'height': '170'}
字典1的id是: 2887594381568
字典2的id是: 2887594384064
字典3的id是: 2887593973952
注意:浅复制只会复制字典本身,如果字典中还有个字典是不会进行复制的
遍历字典
我们主要可以通过3种方式对字典进行遍历
• keys() 该方法返回字典所有的key
dic1={'name':'刘亦菲','sex':'female','height':'170'}
print(dic1.keys())
结果:
dict_keys(['name', 'sex', 'height'])
• values() 该方法返回一个序列 序列中保存有字典的值
dic1={'name':'刘亦菲','sex':'female','height':'170'}
print(dic1.values())
结果:
dict_values(['刘亦菲', 'female', '170'])
• items() 该方法会返回字典中所有的项 它返回一个序列,序列中包含有双值子序列 双值分别是 字典中的key和value
示例2:
dic1={'name':'刘亦菲','sex':'female','height':'170'}
print(dic1.items())
结果:
dict_items([('name', '刘亦菲'), ('sex', 'female'), ('height', '170')])
示例2:
dic1={'name':'刘亦菲','sex':'female','height':'170'}
for k,v in dic1.items():
print(k,v)
结果:
name 刘亦菲
sex female
height 170
集合
集合简介
• 集合表现形式set 集合和列表非常相似
• 不同点
• 集合只能存储不可变对象
• 集合中存储的对象是无序的
• 集合不能出现重复元素
• 使用{}来创建集合
集合的方法
• 可以通过set()来将序列和字典转换成集合
dic1={'name':'刘亦菲','sex':'female','height':'170'}
list1="沈腾","贾玲","潘斌龙","周星驰","吴孟达"
s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s2=set(dic1)
s3=set(list1)
print('字典转换集合结果为:',s2,'\n列表转换集合结果为:',s3)
结果:
字典转换集合结果为: {'sex', 'name', 'height'}
列表转换集合结果为: {'潘斌龙', '吴孟达', '周星驰', '贾玲', '沈腾'}
• len() 获取集合中元素的数量
s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
print(len(s1))
结果:
7
• add()向集合中添加元素
s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s1.add('周星驰')
print(s1)
结果:
{1, 2, 3, 4, '潘斌龙', '周星驰', '贾玲', '沈腾'}
• update()将一个集合中的元素添加到另一个集合当中
s1={1,2,3,4}
s2={'沈腾','贾玲','潘斌龙'}
s1.update(s2)
print(s1)
结果:
{1, 2, 3, 4, '潘斌龙', '沈腾', '贾玲'}
• pop()随机删除集合中的一个元素,一般是删除第一个元素
s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s1.pop()
print(s1)
结果:
{2, 3, 4, '潘斌龙', '贾玲', '沈腾'}
• remove() 删除集合中指定的元素
s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s1.remove(2)
print(s1)
结果:
{1, 3, 4, '潘斌龙', '贾玲', '沈腾'}
• clear() 清空集合
s1={1,2,3,4,'沈腾','贾玲','潘斌龙'}
s1.clear()
print(s1)
结果:
set()
集合的运算
• & 交集运算:取两个集合相同元素
s1={1,2,3,4,5,6}
s2={3,4,5,6,7,8}
print(s1&s2)
结果:
{3, 4, 5, 6}
• | 并集运算:取两个集合所有元素,并合并相关元素
s1={1,2,3,4,5,6}
s2={3,4,5,6,7,8}
print(s1|s2)
结果:
{1, 2, 3, 4, 5, 6, 7, 8}
• - 差集运算:取前一集合比后一集合多余的元素
s1={1,2,3,4,5,6}
s2={3,4,5,6,7,8}
print(s1-s2)
print(s2-s1)
结果:
{1, 2}
{8, 7}
• ^ 亦或集:取两个集合不相同元素
s1={1,2,3,4,5,6}
s2={3,4,5,6,7,8}
print(s1^s2)
结果:
{1, 2, 7, 8}
• <= 检查一个集合是否是另一个集合的子集
• < 检查一个集合是否是另一个集合的真子集
s1={3,4,5,6}
s2={1,2,3,4,5}
s3={3,4,5,6,7,8}
print('s1是s3的子集:',s1<=s3)
print('s2是s3的子集:',s2<=s3)
print('s1是s3的真子集:',s1<s3)
print('s2是s3的真子集:',s2<s3)
结果:
s1是s3的子集: True
s2是s3的子集: False
s1是s3的真子集: True
s2是s3的真子集: False
• >=检查一个集合是否是另一个集合的超集
• >检查一个集合是否是另一个集合的真超集
s1={3,4,5,6}
s2={1,2,3,4,5}
s3={3,4,5,6,7,8}
print('超集:',s3>=s1)
print('真超集:',s3>s2)
结果:
超集: True
真超集: False
代码练习
1.a = {“name”:“123”,“data”:{“result”:[{“src”:“python1”},{“src”:“python2”},{“src”:“python3”}]}} 找到python1/python2/python3
dic1={"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}}
l=len(dic1['data']['result'])
for i in range(l):
print(dic1['data']['result'][i]['src'])
结果:
python1
python2
python3
2.有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。
s1={11,22,33,44,55,66,77,88,99,90}
max_data=[]
min_data=[]
for s in s1:
if s >66 :
max_data.append(s)
elif s<66:
min_data.append(s)
dic1={
'key1':max_data,
'key2':min_data
}
print(dic1)
结果:
{'key1': [99, 77, 88, 90], 'key2': [33, 11, 44, 22, 55]}