字典概念
字典是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据。为了保存具有映射关系的数据,Python 提供了字典,字典相当于保存了两组数据,其中一组数据是关键数据,被称为 key;另一组数据可通过 key 来访问,被称为 value
语法:
注意事项:
键值对,类似Java的Set
题目:
字典的键不能改变,所以可以使用元组当键值,而不能使用列表当键值
增加字典
删除字典
del与popitem一样,删除一个元素,返回被删除这个元素的 key-value
修改字典
查找字典
直接查找
使用get()函数查找字典
题目:
get(“a”,“b”):a是键,b是值;如果想要查找的键所对应的值不存在,则输出字典中键所对应的值
合并两个字典-update()函数
遍历字典
1.for循环
2.keys()遍历
3.values()遍历
4.items()遍历
遍历字典-sorted()和Set()函数
按顺序遍历所有键
要以特定顺序返回元素,我们可以使用 sorted() 函数来获得按特定顺序排列的键列表副本。
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的list,而不是在原来的基础上进行的操作。
for name in sorted(dict2.keys()):print(name.title())
当值中含有很多重复值时,为了剔除重复项,可使用集合 set()
for name in set(dict2.values()):print(name.title())
字典推导式
字典嵌套
将字典储存在列表中,或者将列表储存在字典中,称为嵌套。
字典列表
dict1 = {'物理':90,'化学':85,'生物':88}
dict2 = {'物理':95,'化学':88,'生物':70}
dict3 = {'物理':80,'化学':90,'生物':75}
dict4 = [dict1,dict2,dict3]
for a in dict4:print(a)
字典嵌套列表
dict5 = {'color':'blue','type':['A','B','C']
}
字典嵌套字典
dict6 = {'a':{'name':'Tom','age':6}'b':{'name':'Marry','age':10}
}
练习1-字典列表:用户输入姓名
# 让用户输入姓名,
# 如果该姓名在 persons 中存在,提示用户;
# 若不存在,继续输入年龄到列表中。
persons = [{'name': 'Tom', 'age': 18},{'name': 'lisa', 'age': 15},{'name': 'Sufv', 'age': 20},{'name': 'Linda', 'age': 13}
]
print(persons)
flag = True
while flag:name = input("请输入姓名")for i in persons:if name == i["name"]:print("该姓名在 persons 中存在,结束循环")flag = Falsebreakelse:age = int(input("请输入年龄"))check = {}check[name] = agepersons.append(check)break
print(persons)
练习3-字典列表输出最高分和最低分对应的学生姓名
students = [{'name': '张三', 'age': 18, 'score': 88, 'tel': '1323454658', 'gender': '男'},{'name': '李四', 'age': 19, 'score': 89, 'tel': '1111454656', 'gender': '女'},{'name': 'jack', 'age': 38, 'score': 30, 'tel': '12142344562', 'gender': '不明'},{'name': '小白', 'age': 26, 'score': 35, 'tel': '12142345658', 'gender': '女'},{'name': '可文', 'age': 20, 'score': 90, 'tel': '1903334258', 'gender': '男'},{'name': 'mike', 'age': 14, 'score': 100, 'tel': '1345555678', 'gender': '女'},
]
max=students[0]["score"]
min=students[0]["score"]
maxStudent=''
minStudent=''for i in students:max = max if max > i["score"] else i['score']min = min if min < i["score"] else i['score']for j in range(len(students)):if max == students[j]["score"]:maxStudent = students[j]["name"]if min == students[j]["score"]:minStudent = students[j]["name"]print(max,min,maxStudent,minStudent,sep=' ')
综合练习-字典列表:学生信息输出
# 4
# 声明一个列表,列表中包含6位学生的信息,
# 每位学生的信息包括:
# 姓名,年龄,分数(单科),电话,性别(男,女,不明)
students = [{'name': '张三', 'age': 18, 'score': 88, 'tel': '1323454658', 'gender': '男'},{'name': '李四', 'age': 19, 'score': 89, 'tel': '1111454656', 'gender': '女'},{'name': 'jack', 'age': 38, 'score': 30, 'tel': '12142344562', 'gender': '不明'},{'name': '小白', 'age': 26, 'score': 35, 'tel': '12142345658', 'gender': '女'},{'name': '可文', 'age': 20, 'score': 90, 'tel': '1903334258', 'gender': '男'},{'name': 'mike', 'age': 14, 'score': 100, 'tel': '1345555678', 'gender': '女'},
]
#(1)统计不及格学生个数;
count=0
for i in students:if i["score"]<60:count+=1
print("不及格学生人数:"+str(count))# (2)打印不及格学生姓名和对应成绩;
count=0
list=[]
for i in students:if i["score"]<60:list.append(i["name"]+"的成绩为"+str(i["score"]))
print("不及格学生信息:")
print(list)# (3)统计未成年学生个数;
count=0
for i in students:if i["age"]<18:count+=1
print("未成年学生人数:"+str(count))# (4)打印手机尾号是8的学生名字;
print('手机尾号是8的学生名字:')
for i in students:if i["tel"].endswith('8')==True:print(i["name"])# (5)打印最高分和对应的学生的名字;
max=students[0]["score"]
maxStudent=''
for i in students:max = max if max > i["score"] else i['score']
for j in range(len(students)):if max == students[j]["score"]:maxStudent = students[j]["name"]print("最高分:"+str(max)+"对应的学生姓名为:",maxStudent)# #(6)删除性别不明的所有学生;
j=0
print(students)
for i in students:if i["gender"]=='不明':students.pop(j)j += 1
print(students)# (7)将列表按学生成绩从大到小排序。
#冒泡排序
print(students)
for i in range(len(students) - 1):for j in range(len(students) - 1 - i):if students[j]["age"] < students[j+1]["age"]:temp = students[j]students[j] = students[j + 1]students[j + 1] = tempprint(students)
实验–评委分数
# (1) 输入评委人数;
number=int(input('the number of judges:'))
while number<3:print('number is not quality')number=int(input('the number of judges:'))
# (2) 输入每个评委打分,以字典的形式录入(分数在0-100之间);
score={}
key=97
for i in range(number):s=int(input('the score of the judge:'))while s<0 or s>100:print('score is not quality')s = int(input('the score of the judge:'))score[chr(key + i)]=s
print(score)
# (3) 删除最高分和最低分;
max_score=max(score.items(),key=lambda x:x[1])
min_score=min(score.items(),key=lambda x:x[1])
# print(max_score,min_score,sep='\n')score.pop(max_score[0])
score.pop(min_score[0])
print(score)
# (4) 计算剩余打分的平均分。
from functools import reduce
list1=list(score.values())
average=reduce(lambda x,y:x+y,list1)
print("the average score="+str(average/len(list1)))