可变对像+元组与字典2020-11-10

1. 元组快速入门

  • 元组是不可变序列
  • 当希望这个数据不改变的时候用元组,其余情况用列表。

1.1 元组的创建

tup=()
print(tup,type(tup))

用()可以创建一个空元组。
在这里插入图片描述

1.2 元组的取值

tup=(1,2,3,4,5,6,7)
print(tup[0])

在这里插入图片描述
元组的取值方法跟列表相同,不同的是元组不能被修改,如果按照列表的方法修改则会报错,如:

tup=(1,2,3,4,5,6,7)
tup[0]=8
print(tup)

在这里插入图片描述
报错显示,元组对象不支持元素赋值。

1.3 元组的另类形式,一个逗号

元组可以加括号,也可以不加括号,元组的元素用逗号隔开就行,元组如果不是空的,至少有一个逗号。

tub=10,
print(tub,type(tub))

在这里插入图片描述

tub='王朝','马汉','张龙','赵虎'
print(tub)

在这里插入图片描述

1.4 元组解包

可以把元组里的元素赋值给指定的变量。

tub=10,20,30,40
a,b,c,d=tub
print('a=',a)
print('b=',b)
print('c=',c)
print('d=',d)

在这里插入图片描述
像这样把元组中的每一个元素赋值给一个变量,叫着元组的解包
注意:

  • 解包时元素的数目和接收元素的变量的数目要保持一致,否则会报错
  • 如果遇到解包时接收元组元素的变量不够,需要以列表的方式将多个元素赋值给其中一个变量,则将该变量前加*即可。
  • 元素的个数少于变量的个数则会报错
    在这里插入图片描述
tub=10,20,30,40
a,b,*c=tub
print('a=',a)
print('b=',b)
print('c=',c)

在这里插入图片描述
换个变量接收多元素

tub=10,20,30,40
a,*b,c=tub
print('a=',a)
print('b=',b)
print('c=',c)

在这里插入图片描述
再换个变量接收多元素

tub=10,20,30,40
*a,b,c=tub
print('a=',a)
print('b=',b)
print('c=',c)

在这里插入图片描述
其中的规律大家应该自己已经看明白了,我就不总结了。

2. 可变对象

可变序列属于可变对象的一种。一个对象包括了这三个东西:

  • id 标识
  • type 类型
  • value 值

2.1 两种修改对象的方式

这里有一个列表

a=[1,2,3,4,5,6]

现在有两种改变这个对象的方法:

a=[1,2,3,4,5,6]
a[0]=10
print(a)
print(id(a))

在这里插入图片描述
这种方法是改变了变量的值,但是没有改变变量所指向的对象

a=[1,2,3,4,5,6]
a=[7,8,9,10,11]
print(a)
print(id(a))

在这里插入图片描述

这种方法是对变量重新赋值了,改变了变量指向的对象

2.2 改变值不一定改变对象

再看一个例子

a=[1,2,3]
b=a
print('a=',a,id(a))
b[0]=10
print('a=',a,id(a))
print('b=',b,id(b))

在这里插入图片描述

当我们修改了一个变量的值,如果有其他变量也指向这个对象,则这个变量的值也改变,但对象却是一个对象。

2.3 对象改变了值也可能相同

再看一个例子:

a=[1,2,3]
b=a
print('a=',a,id(a))
b[0]=10
print('a=',a,id(a))
print('b=',b,id(b))
b=[10,2,3]
print('b=',b,id(b))

在这里插入图片描述

这次是重新赋值,对象改变了。
所以,关于可变对象,对象和值的关系,通过这些例子,相信你心中有数了。

2.4 举例练习

例题:

a=[1,2,3]
b=[1,2,3]
print(a==b)
print(a is b)
print('a',id(a))
print('b',id(b))

结果
在这里插入图片描述

3. 字典

字典是一种方便查找的数据存储方式;是一种新的数据结构,称之为映射

  • 字典和列表一样,都是存储数据的形式
  • 列表存储数据方便,但是查询数据没有字典方便
  • 字典每个元素都有一对键值对组成,可以快捷的通过键来查询对应的值(key-value)结构
  • 每个键值对,我们成为一项(item)

3.1 创建一个字典

a={'name':'葫芦娃','sex':'男','age':10}
print(a['name'],a['sex'],a['age'])

结果
在这里插入图片描述
可以很方便的取出我们要的结果值
注意:

  • 字典的键最好不用重复,如果重复,后面的值会取代前面相同键的值
  • 字典里项如果比较多,为了方便查看也可以实现竖向排列
a = {
    'name': '葫芦娃',
    'sex': '男',
    'age': 10
}

# 可以用快捷键ctrl+shift+alt+L自动调整代码格式(也可以点击上方菜单里的code>reformat code)如下图:

在这里插入图片描述

3.2 字典的使用

3.2.1 官方文档查看

在这里插入图片描述

3.2.2 用dict()函数来创建字典
d=dict(name='葫芦娃',sex='男',age='10')
print(d,type(d))

结果
在这里插入图片描述

3.2.3 dict()将包含有双值子序列的序列转换成字典

双值序列 指有两个值的序列,如:‘gk’, (‘w’,1), [4,5]
子序列 序列中的元素也是个序列。如:[(‘w’,1), [4,5],(1,2)]

d=dict([('name','葫芦娃'),('age',10)])
print(d)

结果

在这里插入图片描述

3.2.4 通过字典的键来获取字典的元素

语法:
d[key]
key值一定要加上引号,不然会当作变量来处理

d=dict([('name','葫芦娃'),('age',10)])
print(d['age'])

结果
在这里插入图片描述
或者可以这样

d=dict([('name','葫芦娃'),('age',10)])
n='age'
print(d[n])

在这里插入图片描述
结果一样,但如果直接这样:

d=dict([('name','葫芦娃'),('age',10)])
print(d[age])

就会报错
在这里插入图片描述

3.2.5 get()函数获取字典里的值
d=dict([('name','葫芦娃'),('age',10)])
print(d.get('name'))

结果

在这里插入图片描述

假如没有这个键,也不会报错,而是会返回一个None值。

d=dict([('name','葫芦娃'),('age',10)])
print(d.get('name1'))

结果
在这里插入图片描述

3.2.6 get(key,[default])函数获取字典中的值

default也可以指定一个默认值来作为第二个参数,如果这个键存在则返回对应的值,如果取不到这个key则返回默认值

d=dict([('name','葫芦娃'),('age',10)])
print(d.get('name1','这个键不存在'))

结果
在这里插入图片描述

3.2.7 修改字典

语法格式

d=dict([('name','葫芦娃'),('age',10)])
d['name']='钢铁侠'

在这里插入图片描述
通过

字典名['新键']='新值'

的格式可以添加键值对

d=dict([('name','葫芦娃'),('age',10)])
d['name1']='孙悟空'
print(d)

结果
在这里插入图片描述

可以看到,再原来字典的基础上又添加了键值对。
如果这个键和里面的键重复,则直接覆盖原来的值。

d=dict([('name','葫芦娃'),('age',10),('name1','孙悟空')])
print(d)
d['name1']='猪八戒'
print(d)

结果
在这里插入图片描述

可以看到原来’name1’的值’孙悟空’已经被新的值’猪八戒’覆盖了。

3.2.8 d.setdefault()向字典中添加键值对
  • 这种方法,如果新添加的key值已经存在,则返回key值,不对字典做任何的修改
  • 如果新添加的key值不存在,则对字典添加新的键值对
d=dict([('name','葫芦娃'),('age',10)])
d.setdefault('name','金刚侠')
print(d)
d.setdefault('name2','沙和尚')
print(d)

结果
在这里插入图片描述

3.2.9 update()方法

update()将其他字典的键值添加到当前字典中

d=dict([('name','葫芦娃'),('age',10)])
d2={'name3':'孙悟空','name4':'猪八戒','name5':'沙和尚'}
d.update(d2)
print(d)
print(d2)

在这里插入图片描述
如果要有重复的key将被后面的覆盖。

3.2.10 删除键值对
3.2.10.1 用del删除
d={'name': '葫芦娃', 'age': 10, 'name3': '孙悟空', 'name4': '猪八戒', 'name5': '沙和尚'}
del d['name']
del d['age']
print(d)

结果
在这里插入图片描述

3.2.10.2 popitem()方法随机删除字典中的一个元素

默认删除字典中最后的一个元素
语法格式

d={'name': '葫芦娃', 'age': 10, 'name3': '孙悟空', 'name4': '猪八戒', 'name5': '沙和尚'}
d.popitem()
print(d)
d.popitem()
print(d)

在这里插入图片描述
popitem()会把删除的元素当作返回值

d={'name': '葫芦娃', 'age': 10, 'name3': '孙悟空', 'name4': '猪八戒', 'name5': '沙和尚'}
r=d.popitem()
print(d)
print(r)

在这里插入图片描述

3.2.10.3 pop()根据指定的key来删除元素

pop()删除元素也又返回值,返回的是删除的元素的value

d={'name': '葫芦娃', 'age': 10, 'name3': '孙悟空', 'name4': '猪八戒', 'name5': '沙和尚'}
r=d.pop('name3')
print(d)
print(r)

结果

在这里插入图片描述
如果要删除的指定key在原来的字典里不存在则会报错

d={'name': '葫芦娃', 'age': 10, 'name3': '孙悟空', 'name4': '猪八戒', 'name5': '沙和尚'}
r=d.pop('name6')
print(d)
print(r)

结果
在这里插入图片描述
当然可以传入第二个参数,避免报错,即pop(key,[default])

d={'name': '葫芦娃', 'age': 10, 'name3': '孙悟空', 'name4': '猪八戒', 'name5': '沙和尚'}
r=d.pop('name6','这个key不存在')
print(d)
print(r)

结果
在这里插入图片描述

3.2.11 clear()清空字典

语法结构

d.clear()

例如

d={'name': '葫芦娃', 'age': 10, 'name3': '孙悟空', 'name4': '猪八戒', 'name5': '沙和尚'}
d.clear()
print(d)

在这里插入图片描述

4. 作业

4.1 写博客梳理本节内容

4.2 课堂代码敲三遍

4.3 课堂作业

4.3.1 字典练习,找指定的值

在字典a = {“name”:“123”,“data”:{“result”:[{“src”:“python1”},{“src”:“python2”},
{“src”:“python3”}]}} 找到python1/python2/python3

答案

a = {"name":"123","data":{"result":[{"src":"python1"},{"src":"python2"},{"src":"python3"}]}}
v_1=a['data']['result'][0]['src']
v_2=a['data']['result'][1]['src']
v_3=a['data']['result'][2]['src']
print(v_1)
print(v_2)
print(v_3)

结果
在这里插入图片描述

4.3.2 字典练习,创建字典

有如下值列表[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key
中,将小于66值保存至第二个key的值中

答案

a=[11,22,33,44,55,66,77,88,99,90]
lst_1=[]
lst_2=[]
for i in a:
    if int(i)>66:
        lst_1.append(i)
    elif:
    	if int(i)<6:
        lst_2.append(i)
num=dict(num_1=lst_1,num_2=lst_2)
print(num)

结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46738467/article/details/109597411