1.可以使用{}或dict()创建空字典,但若要创建空集合只能用set函数
2.将列表生成表达式中的一对中括号改为一对小括号即可得到生成器
对于生成器对象,也可以像其他可迭代对象一样使用for循环遍历对象中的每一个元素
如果生成元素的方法比较复杂,不适合用for循环方式实现,我们还可以借助yield关键字利用函数实现生成器的功能
生成器是一个迭代器,元素用时才生成
3.列表是可迭代对象、但不是迭代器,需用iter函数转化为迭代器;而生成器既是可迭代对象、又是迭代器
4.dict3 = {[4,5,6]: “uesr”}不能创建一个字典,因为列表不可哈希
5.type({}) == set False# 空大括号是字典类型<class 'dict'>
6.d2=dict().fromkeys(['radius','height'],0)# 创建字典,键值都为0
d2.update(radius=10)# 更新,原来有的就改值,没有的就添加
height=d2.pop('height','not found')# 删除键值对,若找不到该键返回'not found'
print(len(d2))# 查键值对个数
# 随机生成50个介于[1,20]之间的整数,然后统计每个整数出现频率。
import random
x = [random.randint(1,20) for i in range(50)]
r = dict()
print(x)
for i in x:
r[i] = r.get(i,0)+1
for k, v in r.items():
print(k, v)
#
- 生成100个银行卡号, 卡号以62012022开头, 后面3位依次是(001,002,003…..100);
- 生成关于银行卡号的字典, 默认每个卡号的初始密码为(‘123456’)或为随机六位数(可选择一种方法);
- 输出卡号和密码信息。
法一
import random
card = ["62012022"+str(i).zfill(3) for i in range(1,101)]# 不足三位用0填充
password = dict(zip(card,[str(random.randint(100000,1000000)) for i in range(100)]))#100个六位随机数
print(password)
法二
#%方法
card = ["62012022"+"%03d"%i for i in range(1,101)]
password = {}.fromkeys(card,'123456')
print(password)
#format方法
card = ["62012022"+"{:>03d}".format(i) for i in range(1,101)]
password = {}.fromkeys(card,'123456')
print(password)
#f""方法
card = ["62012022"+f"{i:>03d}" for i in range(1,101)]
password = {}.fromkeys(card,'123456')
print(password)
# 将学生成绩按照从高到低排序并输出,并打印出班级平均分以及优秀率(成绩>= 90为优秀,小数点后保留两位),再打印出成绩在90分以上学生的姓名及成绩。
from decimal import *
form = {'Aaa':80,'Bbb':75,'Ccc':88,'Ddd':65,'Eee':90,'Fff':95,'Ggg':58,'Hhh':86,'Iii':78}
name = [i for i in form.keys()]
score = [j for j in form.values()]# 获取相关列表
stu = 0# 优秀学生个数
excellent = {}# 优秀学生字典
for i in range(len(score)):
for j in range(i+1,len(score)):
if score[i]<score[j]:
score[i],score[j]=score[j],score[i]
name[i],name[j]=name[j],name[i]# 冒泡排序
if score[i] >= 90:
stu = stu + 1# 计算优秀学生个数
excellent[name[i]]=score[i]# 写入优秀学生键值对
form = dict(zip(name,score))# 排序后成绩转化成字典
ave = Decimal(sum(score))/Decimal(len(score))# 班级平均分
stu = Decimal(stu)/Decimal(len(score))# '班级优秀率
ave = ave.quantize(Decimal("0.00"),ROUND_HALF_UP)# 四舍五入
stu = stu.quantize(Decimal("0.00"),ROUND_HALF_UP)
print('由高到低成绩:\n',form)
print('班级平均分',ave)
print('班级优秀率',stu)
print('90分以上学生:\n',excellent)