0
点赞
收藏
分享

微信扫一扫

【Python】字典相关

三千筱夜 2022-04-18 阅读 109

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)

  1. 生成100个银行卡号,   卡号以62012022开头, 后面3位依次是(001,002,003…..100);
  2. 生成关于银行卡号的字典, 默认每个卡号的初始密码为(‘123456’)或为随机六位数(可选择一种方法);
  3. 输出卡号和密码信息。

法一

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)
举报

相关推荐

0 条评论