【Python】字典相关

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)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*Min*

写的不好多多包涵~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值