集团网站建设案例与网站作用,湖南省建三公司官网,公司网站首页设计构想,oa系统办公平台目录
十一. 字典介绍
基本使用
遍历字典#xff08;keys、values、items#xff09;
十二.字典的常见操作
数据查询 - 普通方式
数据查询 - get方式
数据修改
数据增加
数据删除
十三. 推导式
列表推导式#xff1a;
集合推导式#xff1a;
字典推导式#x…目录
十一. 字典介绍
基本使用
遍历字典keys、values、items
十二.字典的常见操作
数据查询 - 普通方式
数据查询 - get方式
数据修改
数据增加
数据删除
十三. 推导式
列表推导式
集合推导式
字典推导式 十一. 字典介绍
引入
场景一声明一个列表保存学生信息
name_list [张三, 李四, 王五]
如果发现 李四 这个名字写错了通过下标修改
name_list[1] 赵六
但是如果列表元素的顺序发生了变化如下列代码
name_list [张三, 王五, 李四]
此时就必须需要修改下标才能完成姓名的修改
name_list[2] 赵六
问有没有方法既能存储多个数据还能在访问元素的时候就可以很方便就能够定位到需要的那个元素呢
场景二学生信息列表每个学生信息包括学号、姓名、年龄等如何从中找到某个学生的信息
students [[1001, 张三, 24], [1002, 李四, 23], [1005, 王五24], ...]
假如上述列表有100个人的信息此时会发现想要找到某个人的信息虽然我们可以数索引0 1 2...但这也太麻烦了。
通过上面的2个场景的描述发现虽然列表可以很轻松的实现数据的增删改查但当多个数据时想要快速定位到某个数据就会很不方便。
基于此原因Python发明了一种特殊的下标可以快速的找到想要的数据。
拥有这种特殊下标的数据类型就是字典。
基本使用
{key: value, key2: value ...}
说明
key可以理解为我们自己可以定义的下标value可以理解为我们要存储的真正的数据字典只要存储一个数据就必须用key: value我们常称为键值对组成
代码示例
定义一个字典存储信息
teacher_info {name: 小明, age: 18, home: 兰州
}
说明
字典能够存储多个数据列表中找某个元素时是根据下标进行的字典中找某个元素时是根据key就是冒号:前面的那个值例如上面代码中的name、home、age字典的每个元素由2部分组成键:值
根据key访问value
teacher_info {name: 小明,age: 18,home: 兰州
}print(teacher_info[name]) # 获取姓名
print(teacher_info[age]) # 获取年龄
print(teacher_info[home]) # 获取住址运行结果
小明
18
兰州遍历字典keys、values、items
keys()方法
遍历字典的键key
teacher_info {name: 小明,age: 18,home: 兰州
}for key in teacher_info.keys():print(key)运行结果
name
age
home
values()方法
遍历字典的值value
teacher_info {name: 小明,age: 18,home: 兰州
}for val in teacher_info.values():print(val)运行结果
小明
18
兰州
items()方法
遍历字典的项元素
teacher_info {name: 小明,age: 18,home: 兰州
}for item in teacher_info.items():print(item)运行结果
(name, 小明)
(age, 18)
(home, 兰州)
十二.字典的常见操作
数据查询 - 普通方式
teacher_info {name: 小明,age: 18,home: 兰州
}print(teacher_info[QQ]) # 当前字典不存在QQ这个键运行结果
Traceback (most recent call last):File /Users/poppies/Desktop/字典.py, line 8, in moduleprint(teacher_info[QQ])
KeyError: QQ
数据查询 - get方式
在我们不确定字典中是否存在某个键而又想获取其值时可以使用get方法还可以设置默认值
teacher_info {name: 小明,age: 18,home: 兰州
}print(teacher_info.get(QQ, 当前字典不存在QQ这个key)) # 当前字典不存在QQ这个键运行结果找不到指定的key则使用默认值程序不会因为key的不存在而崩溃当前字典不存在QQ这个key
数据修改
字典的每个元素中的数据是可以修改的只要通过key找到即可修改
info {name: 班长, id: 100, sex: 男, address: 中国北京}new_id input(请输入新的学号:)
info[id] int(new_id)print(修改之后的id为: %d % info[id])运行结果
请输入新的学号:1010
修改之后的id为: 1010
数据增加
新的key以及value就表示添加一个新的键值对
即如果在使用变量名[键] 数据时这个键在字典中不存在那么就会新增这个元素
info {name: 班长, id: 100, sex: 男, address: 中国北京}print(info)
info[web_address] www.baidu.com # 添加一个新的键值对
print(info)
执行结果
{name: 班长, id: 100, sex: 男, address: 中国北京}
{name: 班长, id: 100, sex: 男, address: 中国北京, web_address: www.baidu.com}
数据删除
对字典进行删除操作有一下几种
delclear()
del删除指定的元素
teacher_info {name: 小明, age: 18, home: 兰州}print(teacher_info)
del teacher_info[home]
print(teacher_info)
运行结果
{name: 小明, age: 18, nome: 兰州}
{name: 小明, age: 18}
del删除整个字典
teacher_info {name: 小明, age: 18, home: 兰州}print(teacher_info)
del teacher_info
print(teacher_info)
执行结果
{name: 小明, age: 18, nome: 兰州}
Traceback (most recent call last):File /Users/poppies/Desktop/字典常见操作.py, line 7, in moduleprint(teacher_info)
NameError: name teacher_info is not defined
clear()清空整个字典元素
teacher_info {name: 小明, age: 18, home: 兰州}print(teacher_info)
teacher_info.clear()
print(teacher_info)
运行结果
{name: 小明, age: 18, nome: 兰州}
{}
十三. 推导式
引入
推导式就是一种能够快速生成数据的方式。
例如想要快速生成由1~20内所有偶数数组成的列表就可以用推导式代码如下
[x for x in range(1, 21) if x % 2 0]
运行结果如下
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
分类
根据最终要生成的数据简单划分为
列表推导式集合推导式字典推导式
注意没有元组推导式使用元组推导获取的结果是生成器对象在Python进阶课程中学习
列表推导式
一种可以快速生成列表的方式
代码格式
[变量 for 变量 in 可迭代对象]
案例一
In [1]: a [x for x in range(4)]In [2]: a
Out[2]: [0, 1, 2, 3]In [3]: a [x for x in range(3, 4)]In [4]: a
Out[4]: [3]In [5]: a [x for x in range(3, 19)]In [6]: a
Out[6]: [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]In [7]: a [x for x in range(3, 19, 2)]In [8]: a
Out[8]: [3, 5, 7, 9, 11, 13, 15, 17]
案例二列表推导式中用到了if
注意列表推导式如果for中用到了iffor不用写 :
In [9]: a [x for x in range(3, 10) if x % 2 0]In [10]: a
Out[10]: [4, 6, 8]In [11]: a [x for x in range(3, 10) if x % 2 ! 0]In [12]: a
Out[12]: [3, 5, 7, 9]
案例三在列表推导式中使用两个for循环
In [13]: a [(x, y) for x in range(1, 3) for y in range(3)]In [14]: a
Out[14]: [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
案例四在列表推导式中使用三个for循环
In [15]: a [(x, y, z) for x in range(1, 3) for y in range(3) for z in range(4, 6)]In [16]: a
Out[16]:
[(1, 0, 4),(1, 0, 5),(1, 1, 4),(1, 1, 5),(1, 2, 4),(1, 2, 5),(2, 0, 4),(2, 0, 5),(2, 1, 4),(2, 1, 5),(2, 2, 4),(2, 2, 5)]
练习
请写出一段Python代码实现分组一个list里面的元素,比如[1,2,3,...100]变成[[1,2,3],[4,5,6]....]
参考答案
a [x for x in range(1,101)]
b [a[x: x 3] for x in range(0, len(a), 3)]
print(b)
集合推导式
一种快速生成集合的方式
示例代码
In [5]: a {x for x in range(1, 21) if x % 2 0}In [6]: type(a)
Out[6]: setIn [7]: a
Out[7]: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
字典推导式
一种快速生成字典的方式
案例一快速生成一个1~10内key为某个数此时value为平方的字典
{x: x ** 2 for x in range(1, 11)}
运行效果
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
案例二快速生成一个1~10内key可以1时value为2key为2时value3....依次类推的字典
{x: (x 1) for x in range(1,11)}
运行效果
{1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10, 10: 11}
练习
编写代码用推导式实现如下效果列表中嵌套字典
[{1: 1},{2: 4},{3: 9},{4: 16},{5: 25},{6: 36},{7: 49},{8: 64},{9: 81},{10: 100}]
参考代码
[{x:x**2} for x in range(1,11)]