八、遍历字典及函数基本概念
1:字典的基本介绍
- 字典属于一种新的数据结构称为映射
- 字典的作用和列表类似,都是用来存储对象的容器
- 列表存储数据的性能好,但是查询数据的性能差,字典正好与之相反字典查询方便
- 在字典中每一个元素都有唯一的名字,通过这个唯一的名字可以找到指定的元素
- 这个唯一的名字我们称之为key(键) 通过key可以快速查询value(值) 也可以称之为值
- 字典我们也称之为键值对(key-value)结构或称这一组键值对为item表示
- 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
- 创建一个有数据的字典 语法 {key1:value1,key2:value2},键和值之间用冒号进 行分割,每组键值对之间用逗号进行分割
- 字典的值可以是任意对象 字典的键可以是任意的不可变对象(int,str ,bool ,tuple…)
- 字典的键是不能重复的,如果出现重复的后面的会替换前面的键的覆盖
2:字典的使用
2.1:字典的创建
- 方法1:使用花括号({ })进行创建最常用的方法
dict1 = {key1:value1,key2:value2}
- 方法2:使用dict()函数进行强制类型进行转换
dict2 = dict(key1=value,key2=value2)
- 方法3:使用元组的方法进行创建
dict3 = dict([(key1,value1),(key2,value2)])
2.2:字典常用的方法
- get()方法:get(key[,default]) 根据键来获取字典的值。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值
- update() :将其他字典的key-value添加到当前的字典当中和通用方法中的“+”方法效果相同
- del语句:del 删除字典中的key-value,使用del删除时必须要指定字典名和删除的键
- popitem方法:popitem() 删除字典最后的一个key-value 这个方法是有返回值的。删除之后它会将删除的key-value作为返回值返回
- pop()方法pop(key[,default]) 根据key删除自定中的value。第二个参数可以指定一个默认值,当获取不到值的时候会返回默认值,可以设置当删除字典中不存在的键的时候返回提醒语句
3:元组
3.1:元组的介绍
- 元组是一个不可变序列(一般当我们希望数据不改变时,我们使用元组,其他情况下基本都用列表)
- 我们可以认为元组是不可变的列表
3.2:元组的创建
- 方法1:使用小括号(( ))进行创建最常用的方法
tuple1 = (value1,value2)
- 方法2:使用tuple()函数进行强制转化通过强制类型转换把,列表转换为元组
tuple2 = tuple([value1,value2])
- 元组不是空元组至少有一个 逗号(,) 当元组不是空元组时括号可以省略
- 元组解包指将元组当中的每一个元素都赋值给一个变量要保证元组中的元素个数和变量的个数相同
- 注意:元组是可以切片的,切片是不改变原序列的数据,但是无序的数据结构是不可以切片的,因为没有索引
作业
1
# 给用户9次机会猜1 - 10 个数字随机来猜数字。
# 如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误。
# 最终结果要求用户怎么也猜不对
# 用一个列表来存储这10个数据
list_1 = [i for i in range(10)]
print("--------游戏规则:--------")
print("请您猜[0-10)这个范围里的数字。")
# 使用列表来保存已经输入的数字
list_2 = []
# 使用for循环提示用户的输入输出
for i in range(9):
# 提示用户输入第几个数
number = int(input(f"请输入第{i+1}个数:"))
# 把已经输入的数字保存到list-2中
list_2.append(number)
# 提示用户输入错误
print(f"输入错误,这个数字不是{number},您输入的有{list_2}")
# 把这个数字从list_1中给剔除
list_1.remove(number)
else:
print("游戏结束!!!")
print(f"这个数字为{list_1}")
print("游戏结束")
2
# 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中,并保证每间办公室中都有一个人
# 导入模块
import random
# 使用一个列表来存储这8位老师的名字
teacher_name = ['张老师', '李老师', '王老师', '梁老师', '宋老师', '赵老师', '周老师', '小明']
# 使用循环和随机数来把老师随机的放在三间教室中
while True:
# 使用一个列表来表示三间教室,并清空列表中的元素
classroom = [[], [], []]
# 对教师进行办公室的分配
for i in teacher_name:
a = random.randint(0, 2)
classroom[a].append(i)
# 如果有空教室则重新分配
if len(classroom[0]) > 1 and len(classroom[1]) and len(classroom[2]):
print(classroom[0])
print(classroom[1])
print(classroom[2])
break
print("分配完成!!!")
# 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"}]}}
python_1 = a["data"]["result"][0]["src"]
print(python_1)
python_2 = a["data"]["result"][1]["src"]
print(python_2)
python_3 = a["data"]["result"][2]["src"]
print(python_3)
# 有如下值列表[11,22,33,44,55,66,77,88,99,90],
# 将所有大于66的值保存至字典的第一个key的值中,将小于66值保存至第二个key的值中。
list_1 = [11,22,33,44,55,66,77,88,99,90]
dict_1 = {"大于66": [], "小于66": [], "等于66": []}
for i in list_1:
if i > 66:
dict_1["大于66"].append(i)
elif i < 66:
dict_1["小于66"].append(i)
else:
dict_1["等于66"].append(i)
print(f'大于66的:{dict_1["大于66"]}')
print(f'小于66的:{dict_1["小于66"]}')
print(f'等于66的:{dict_1["等于66"]}')