补充:字典与集合应用实例(p.113)

编写程序,统计男女生人数,并检查年龄超过18岁学生的姓名。

分析:信息表中每一行存储个人信息,可以考虑用字典存储,其中,姓名作为键,性别和年龄可以作为元组的形式充当值。然后通过字典遍历完成统计和查询。

#编写程序,统计男女生人数,并检查年龄超过18岁学生的姓名。
disStus={'tom':('男',19),'jary':('女',17),'Siri':('男',18),'kuku':('女',20),'xiao':('女',19),'chen':('男',19)}
cnts={}
names=[]
for k,v in disStus.items():
    cnts[v[0]]=cnts.get(v[0],0)+1
    if v[1]>18:
        names.append(k)
print("女生有{}人,男生有{}人".format(cnts['女'],cnts['男']))
print("超过18岁的有")
print(names)

女生有3人,男生有3人
超过18岁的有
['tom', 'kuku', 'xiao', 'chen']

由此,可以做出统计班级学生籍贯的结果

disBoys = {'江苏': 8, '河南': 3, '山东': 5, '日本': 5, '北京': 2}
disGirls = {'江苏': 3, '吉林': 3, '山东': 5}
dic = disBoys.copy()
for k, v in disGirls.items():
    dic[k] = dic.get(k, 0) + v
print(dic)

{'江苏': 11, '河南': 3, '山东': 10, '日本': 5, '北京': 2, '吉林': 3}


统计学生购物情况:统计每一类消费项目的平均消费金额;分别统计男、女生总金额平均值

ls = [
    {'性别': '女', '书本': 10, '文具': 30, '服饰': 150, '零食': 300, '日用品': 600},
    {'性别': '女', '书本': 32, '文具': 41, '服饰': 444, '零食': 123, '日用品': 555},
    {'性别': '男', '书本': 12, '文具': 33, '服饰': 643, '零食': 222, '日用品': 555},
    {'性别': '男', '书本': 32, '文具': 55, '服饰': 634, '零食': 441, '日用品': 678},
    {'性别': '男', '书本': 4, '文具': 22, '服饰': 126, '零食': 55, '日用品': 642},
    {'性别': '女', '书本': 44, '文具': 39, '服饰': 2121, '零食': 445, '日用品': 632},
    {'性别': '女', '书本': 11, '文具': 23, '服饰': 1212, '零食': 531, '日用品': 126},
    {'性别': '男', '书本': 24, '文具': 63, '服饰': 5312, '零食': 632, '日用品': 743},
    {'性别': '男', '书本': 33, '文具': 42, '服饰': 4421, '零食': 312, '日用品': 412},
    {'性别': '男', '书本': 24, '文具': 22, '服饰': 1332, '零食': 311, '日用品': 555}
]
# 统计每一类消费项目的平均消费金额
total = {}
for dic in ls:  # 遍历列表中每一个字典元素
    for k, v in dic.items():  # 遍历当前字典元素的每一个条件
        if k != '性别':
            total[k] = total.get(k, 0) + v
print("每一类消费项目的平均消费金额如下:")
for key in total.keys():
    print(key, end='\t')
print()
for value in total.values():
    print(value / len(ls), end='\t')
# 分别统计男、女生平均消费总金额
dicAcg = {}
dicCnt = {}
for dic in ls:
    s = 0
    for k, v in dic.items():
        if k != '性别':
            s = s + v  # 将同一学生消费金额求和
    dicAcg[dic['性别']] = dicAcg.get(dic['性别'], 0) + s  # 按性别累加金额消费
    dicCnt[dic['性别']] = dicCnt.get(dic['性别'], 0) + 1  # 按性别统计人数
for sex in ['男', '女']:
    dicAcg[sex] /= dicCnt[sex]
print("\n男、女平均消费总金额是:")
print(dicAvg)

每一类消费项目的平均消费金额如下:
书本    文具    服饰    零食    日用品    
22.6    37.0    1639.5    337.2    549.8    
男、女平均消费总金额是:
{'女': 1867.25, '男': 3065.3333333333335}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值