第8讲 python 元组和字典

元组 表现形式 tuple

元组是一个不可变序列

1、什么时候用元组,什么时候用列表?

一般当我们希望这个数据不可变的时候我们用元组,其余情况用列表

my_tuple = () #创建一个空的元组
my_tuple = (1,2,3,4,5) #给元祖赋值
print(my_tuple,type(my_tuple)) #打印元祖,type查看数据类型
返回:(1, 2, 3, 4, 5) <class ‘tuple’>

包含一个元素的元组
my_tuple = 10, #包含一个元素的元祖,必须跟上一个逗号‘,’
print(my_tuple,type(my_tuple))
返回:(10,) <class ‘tuple’>

如果元组不是空的元组,它里面至少包含一个逗号(,)
元组的解包:指的是将元组当中的每一个元素都赋值给一个变量
my_tuple = 10,20,30,40
a,b,c,d = my_tuple
print(‘a =’,a)
print(‘b =’,b)
print(‘c =’,c)
print(‘d =’,d)
返回值:
a = 10
b = 20
c = 30
d = 40

在对一个元组进行解包时,变量的数量要和元组中的元素保持一致
当变量和元组中的数量不一致时,我们可以在变量前面加一个*,这样变量将会获取元素中剩余的元素
my_tuple = 10,20,30,40
a,b,*c = my_tuple
print(a,b,c)
返回值:10 20 [30, 40]

a,*b,c = my_tuple
print(a,b,c)
返回值:10 [20, 30] 40

*a,b,c = my_tuple
print(a,b,c)
返回值:[10, 20] 30 40

a,b,*c = ‘python java’
print(a,b,c)
返回值:p y [‘t’, ‘h’, ‘o’, ‘n’, ’ ', ‘j’, ‘a’, ‘v’, ‘a’]

a,b,*c = [1,2,3,4,5,6,7]
print(a,b,c)
返回值:1 2 [3, 4, 5, 6, 7]

2、可变对象

#每个对象当中包含了三个对象
id(表示内存地址)
type(类型)
value(值)
a = [1,2,3]
a[0] = 10 (改对象)
这个操作是通过变量修改对象里面的值
这种操作不会改变变量指向的对象

a = [4,5,6]
这个操作是在给变量重新赋值
这种操作会改变变量指向的对象
print(‘修改前’,a,id(a))

a = [1,2,3]
print(‘修改前’,a,id(a))
返回值:
修改前 [1, 2, 3] 1997662971656
通过索引来修改列表,
a[0] = 10
print(‘修改后’,a,id(a))
返回值:修改后 [10, 2, 3] 1997662971656

#为变量赋值
a = [4,5,6]
print(‘修改后’,a,id(a))
返回值:修改后 [4, 5, 6] 1997662718472

a和不指向的是同一个对象
a = [1,2,3]
b = a
b[0] = 10
print(‘a=’,a,id(a))
返回值:a= [10, 2, 3] 1997662971720
print(‘b=’,b,id(b))
返回值:b= [10, 2, 3] 1997662971720

a = [1,2,3]
b = a
b = [10,2,3]
print(‘a=’,a,id(a))
返回值:a= [1, 2, 3] 1997623717448
print(‘b=’,b,id(b))
返回值:b= [10, 2, 3] 1997662718472

3、== 和 is

== != 比较的是对象的值是否相等
is 和 is not 比较的是对象的id是否相等
a = [1,2,3]
b = [1,2,3]
print(a,b)
返回值:[1, 2, 3] [1, 2, 3]
print(id(a),id(b))
返回值:1997662889992 1997662971656
print(a is b)
返回值:False
print(a == b)
返回值:True

4、字典简介

4.1 表现形式 dict

字典是一种新的数据结构,称之为映射(mapping)
字典的作用就是用来存储对象的容器
列表存储数据性能很好,但是查询数据性能很差
字典中每一个元素都有唯一的一个名字,通过这个名字可以快速查找指定的元素
唯一的名字称之为(key),通过key可以查找到value,称之为值(value)
所以我们称之为键值对(key-value)
每个字典可以有多个键值对,每个一个键值对我们称之为一项(item)

4.2 使用{}来创建字典

语法:{key1:value1,key2:value2…}

在字典当中键和值可以是那些内容
值可以是任意对象
键可以是任意不可变的对象(int,str,bool,tuple…)
字典中键不能重复,如果重复,则后面覆盖前面的
d = {‘name’:‘葫芦娃’,‘age’:20,‘gender’:‘男’,‘name’:‘钢铁侠’}
print(d)
返回值:{‘name’: ‘钢铁侠’, ‘age’: 20, ‘gender’: ‘男’}

也可以这样为字典赋值

d = {
	'name':'葫芦娃',
	'age'20,
	'gender':'男'
	}

根据键来取值
d = {‘name’:‘葫芦娃’,‘age’:20,‘gender’:‘男’}
print(d[‘name’],d[‘age’],d[‘gender’])
返回值:葫芦娃 20 男

4.2.1 用 dict 创建字典
d = dict(name=‘葫芦娃’,age = 20,gender = ‘男’)
print(d,type(d))
返回值:{‘name’: ‘葫芦娃’, ‘age’: 20, ‘gender’: ‘男’} <class ‘dict’>

4.3 双值序列 与 子序列

双值序列,序列中只有两个值 [3,4] (‘name’,‘hello’) ‘xy’
子序列,如果序列当中的元素也是序列,那么我们就称之为这个元素为子序列([1,2])

4.4len() 长度(获取字典当中键值对个数)

d = dict(name=‘葫芦娃’,age = 20,gender = ‘男’)
len(d)
返回值:3

4.5 in 和 not in

in 检查字典当中是否包含指定的键和值
not in 检查字典当中是否不包含指定的键
d = dict([(‘name’,‘葫芦娃’),(‘age’,20)])
print( ‘age’ in d)
返回值:True
print(‘name’ n d)
返回值:True

4.6 获取字典里面的值

语法:d[key]
d = dict([(‘name’,‘葫芦娃’),(‘age’,20)])
l = print(d[‘age’])
返回值:20

4.7 get(key[,default]) 根据键来获取字典当中的值

#获取的键不存在,会返回None
#也可以指定一个默认值,作为第二个参数,这样当获取不到键的时候会返回默认值
d = dict([(‘name’,‘葫芦娃’),(‘age’,20)])
print(d.get(‘hello’,‘没有这个键’))
返回值:没有这个键

4.8 如果存在则覆盖,不存在则添加

d = dict([(‘name’,‘葫芦娃’),(‘age’,20)])
d[‘name’] = ‘黑猫警长’
print(d)
返回值:{‘name’: ‘黑猫警长’, ‘age’: 20}

d = dict([(‘name’,‘葫芦娃’),(‘age’,20)])
d[‘phone’]=‘123465’
print(d)
返回值:{‘name’: ‘葫芦娃’, ‘age’: 20, ‘phone’: ‘123465’}

4.9 d.setdefault(key[,default]) 可以用来向字典当中添加key-value

如果key已经存在字典当中,则返回key的值,不会对字典做任何操作
如果key不存在,则向字典当中添加这个key,并设置value
result = d.setdefault(‘name’,‘蝙蝠侠’)
result = d.setdefault(‘phnoe’,‘123456’)

4.10 update()

将其他字典中的key-value添加到当前的字典当中,如果键名重复,则后面的键值会覆盖前面的键值
d = {‘a’:1,‘b’:2,‘c’:3}
d2 = {‘d’:4,‘e’:5,‘f’:6,‘a’:7}
d.update(d2)
返回值:{‘a’: 7, ‘b’: 2, ‘c’: 3, ‘d’: 4, ‘e’: 5, ‘f’: 6}

4.11 删除

d = {‘a’:1,‘b’:2,‘c’:3}
del d[‘a’]
print(d)
返回值:{‘b’: 2, ‘c’: 3}

4.12 d.popitem()

删除字典最后面的键值,删除之后将kye-value作为返回值
d2 = {‘d’:4,‘e’:5,‘f’:6,‘a’:7}
result = d2.popitem()
print(‘result=’,result)
返回值:result= (‘a’, 7)

4.13 pop(key[,default])

根据key删除字典中的键值对key-value
返回的是删除的value值
如果删除不存在的key,会抛出异常 key-value
如果指定了默认值,删除不存在的key值的时候,则回返回默认值
d2 = {‘d’:4,‘e’:5,‘f’:6,‘a’:7}
result = d2.pop(‘e’)
print(‘result=’,result)
result = d2.pop(‘x’,‘没有这个值’)

4.14 clear() 清空字典

d2 = {‘d’:4,‘e’:5,‘f’:6,‘a’:7}
d2.clear()
print(d2)

5、浅复制(浅拷贝)

copy()用于对字典进行浅复制
d = {‘d’:4,‘e’:5,‘f’:6,‘a’:7}
d2 = d
d[‘d’]=50
print(‘d=’,d)
返回值:d= {‘d’: 50, ‘e’: 5, ‘f’: 6, ‘a’: 7}
print(‘d2=’,d2)
返回值:d2= {‘d’: 50, ‘e’: 5, ‘f’: 6, ‘a’: 7}

d = {‘d’:50,‘e’:5,‘f’:6,‘a’:7}
d2 = d.copy()
print(‘d=’,d,id(d))
返回值:d= {‘d’: 50, ‘e’: 5, ‘f’: 6, ‘a’: 7} 1997663001120
print(‘d2=’,d2,id(d2))
返回值:d2= {‘d’: 10, ‘e’: 5, ‘f’: 6, ‘a’: 7} 1997663001552

只会复制字典的本身,如果字典中还有字典是不会被复制的,例如:修改d[‘a’][‘name’]的值,d 和 d2都会被修改
d = {‘a’:{‘name’:‘葫芦娃’,‘age’:20},‘b’:2,‘c’:3}
d2 = d.copy()
d2[‘a’][‘name’]=‘黑猫警长’
print(‘d=’,d,id(d))
返回值:d= {‘a’: {‘name’: ‘黑猫警长’, ‘age’: 20}, ‘b’: 2, ‘c’: 3} 1997663070608
print(‘d2=’,d2,id(d2))
返回值:d2= {‘a’: {‘name’: ‘黑猫警长’, ‘age’: 20}, ‘b’: 2, ‘c’: 3} 1997662469720

6、遍历字典

keys()
values()
items()

6.1 keys 会返回字典所有的键

d = {‘name’:‘葫芦娃’,‘age’:20,‘phone’:123465}
print(d.keys())
返回值:dict_keys([‘name’, ‘age’, ‘phone’])

for k in d.keys();
print(d[k])
返回值:
葫芦娃
20
123465

6.2 values() 返回一个序列,序列中保存字典的值

d = {‘name’:‘葫芦娃’,‘age’:20,‘phone’:123465}
print(d.values())
返回值:dict_values([‘葫芦娃’, 20, 123465])

for v in d.values():
print(v)
返回值:
葫芦娃
20
123465

6.3 items()

返回字典但中所有的项,它会返回一个序列,序列中包含双值序列,双值分别是字典当中的 key-value
d = {‘name’:‘葫芦娃’,‘age’:20,‘phone’:123465}
print(d.items())
返回值:dict_items([(‘name’, ‘葫芦娃’), (‘age’, 20), (‘phone’, 123465)])
for x,y in d.items():
print(x,’=’,y)
返回值:
name = 葫芦娃
age = 20
phone = 123465

发布了31 篇原创文章 · 获赞 0 · 访问量 362

猜你喜欢

转载自blog.csdn.net/weixin_38027481/article/details/102563806
今日推荐