7.3 投票文件数据统计

这是一个经典练习,主要涉及对字典和文件处理的综合技能。

主要目的是实现投票文件数据统计,比如有数据文件 count.txt,内容为每个候选人及其选票,可能一个候选人会出现多次:

张三    6
李四    8
王二    3
张三    5
王二    4
张三    3

要求读取文件,并统计汇总结果为: {'张三': 14, '李四': 8, '王二': 7}

1)建立数据文件

可以在PyCharm中直接建立数据文件,右击当前项目,选择New——File,如:

然后即可输入新的文件名称(扩展名也要全部输入):

 

接着就可以输入上述数据内容,保存后即可完成数据文件的准备。

 

 2)测试读取文件

with open('count.txt') as f:
    for line in f.readlines():
        print(line)

可能的运行界面为:

 如果出现这种问题,可能的原因在于字符集没有正确设置,可以使用encoding来选择设置:

with open('count.txt', encoding='UTF-8') as f:
    for line in f.readlines():
        print(line)

运行界面为:

很多同学可能是在其他地方建立的数据文件,比如记事本:

 

此时要注意保存的文件,需要根据情况选择下不同的字符集,比如 UTF-8 等(需要结合自己的电脑来观察,不同的电脑可能不一样):

 

 3)处理数据

将读取过来的数据,进行必要的解析,得到候选人姓名和选票:

with open('count.txt') as f:
    for line in f.readlines():
        words = line.split()
        print(words)

输出为:
['张三', '6']
['李四', '8']
['王二', '3']
['张三', '5']
['王二', '4']
['张三', '3']

也可以:

with open('count.txt') as f:
    for line in f.readlines():
        words = line.split()
        print(words[0], words[1])

输出为:
张三 6
李四 8
王二 3
张三 5
王二 4
张三 3

具体格式可以根据你的处理方法来选择。

4)统计数据

统计方法很直观,遍历读取的每个候选人和选票,然后判断候选人是否在字典中,如不在就新建一个并设置初始值为当前读取的选票数。如在,就把新的选票数累计到原有的值上:

with open('count.txt') as f:
    dict = {}
    for line in f.readlines():
        words = line.split()
        if words[0] not in dict:
            dict[words[0]] = int(words[1])
        else:
            dict[words[0]] = dict[words[0]] + int(words[1])
print(dict)

输出为:{'张三': 14, '李四': 8, '王二': 7}

也可以使用 get 函数来实现同样的功能:

with open('count.txt') as f:
    dict = {}
    for line in f.readlines():
        words = line.split()
        dict[words[0]] = dict.get(words[0], 0) + int(words[1])
print(dict)

输出内容同上。此时无需判断是否存在,因为 get 函数如果有第二个参数(比如这里的 0 ),就会在找不到元素时直接返回第二个参数的值。因此第一次新建一个候选人元素时,对应的 get 函数返回 0 ,加上后面的初始得票数,正好就是第一条候选人的得票数。后续添加相同候选人时,该 get 函数将会返回原有的得票数,正好加上新的得票数,累加成汇总值。

也可以使用 update 函数来实现同样的功能:

with open('count.txt') as f:
    dict = {}
    for line in f.readlines():
        words = line.split()
        dict.update({words[0]: dict.get(words[0], 0) + int(words[1])})
print(dict)

输出内容同上。功能也和上面的 get 函数效果一样。


进一步完善练习,读取文件,并统计平均结果为:

{'张三': 4.67, '李四': 8.0, '王二': 3.5}。

所谓平均结果是指该候选人得票数除以投票人的个数。为此,不仅需要保存投票数总和,还需要统计投票人的个数:

with open('count.txt') as f:
    dict = {}
    for line in f.readlines():
        words = line.split()
        if words[0] not in dict:
            dict[words[0]] = [int(words[1]), 1]
        else:
            dict[words[0]][0] = dict[words[0]][0] + int(words[1])
            dict[words[0]][1] += 1
print(dict)

输出为:{'张三': [14, 3], '李四': [8, 1], '王二': [7, 2]}

这里对于每个字典元素,它的值是一个具有两个值的列表,分别存储着与元素键对应的候选人得票数总和和投票人个数。所以最终可以获得每个候选人的得票总和和投票人个数。

有了这些基础,进一步增加计算平均值的过程:

with open('count.txt') as f:
    dict = {}
    for line in f.readlines():
        words = line.split()
        if words[0] not in dict:
            dict[words[0]] = [int(words[1]), 1]
        else:
            dict[words[0]][0] = dict[words[0]][0] + int(words[1])
            dict[words[0]][1] += 1
dict2 = {}
for i in dict:
    dict2[i] = round(dict[i][0] / dict[i][1], 2)
print(dict2)

输出为:
{'张三': 4.67, '李四': 8.0, '王二': 3.5}

请大家上机观察并调试。

配套学习资源、慕课视频:

Python大数据分析-李树青icon-default.png?t=M1L8https://www.njcie.com/python/

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
YouDianCMS即友点企业网站管理系统集电脑站+手机站+微信站+APP+小程序五合一,数据自动同步,降低人力维护成本;共用一个管理后台,只要一个虚拟主机,有效节约空间投资。系统采用开源技术PHP+MYSQL开发,开源且具有操作简单、功能强大、稳定性好、易扩展、安全性强、维护方便、兼容性好等特点,可帮您快速构建一个强大专业的企业网站。系统支持多语言轻松打造国际站、自定义模型、支持网站模板换肤、内置SEO优化功能、静态页、评论留言、购物车、在线支付、优惠券、积分、三级分销、订单管理、会员、数据采集、短信接口、插件应用商店、广告等企业网站基本功能。运行环境:PHP5.3/5.4/5.5/5.6/7.0/7.1/7.2/7.3 + MYSQL。 运行环境: 操作系统:跨平台,支持Windows、Unix、Linux等操作系统 WEB服务器:IIS/APACHE/NGINX等 PHP环境:PHP5.3-7.3 数据库:MYSQL5.0-8.0 产品特点: 1、完全开源:系统采用开源技术PHP+MYSQL开发,安全、成本低、性价比高、方便安装(全面支持PHP的最新版本)、功能不受限制、使用灵活;全面开放系统前端+后台的源代码,解除了开发者和用户的后顾之忧,完全支持二次开发,没有预留后门,代码使用权自己轻松掌握 2、五站合一:电脑站、手机站、微信、APP、小程序五站合一,共用空间,数据同步,不用维护多个端口数据,一个后台就搞定 3、系统跨平台:Unix/Linux+windows,支持跨平台安装,一键备份轻松搞定网站迁移 支持扩展插件,功能可以无限扩展:系统后台插件应用商店集成了功能强大的免费插件:包含数据采集、三级分销、七牛云存储、邮件群发、图像批量处理等 4、内置网站优化功能SEO优化:系统后台可以设置伪静态、设置HTML静态缓存策略、搜索引擎优化设置、常用搜索引擎登录入口、生成网站地图、生成关键词内链、百度自动推送 功能模块: 功能列表 核心功能:电脑站、手机站、微信、APP、小程序五站合一,共用空间,数据同步;一键备份全站(备份所有程序文件、上传文件数据库),方便网站迁移;手机站和电脑站可独立绑定一级域名、共用空间、数据同步;领先的静态HTML文件缓存策略技术,通过设置缓存时间,自动生成HTML文件,再无需手工生成HTML;内置搜索引擎优化功能,方便网站优化;内置插件,功能无限扩展 系统设置:基本设置、联系方式设置、水印设置、文件上传设置、站长统计设置、百度分享设置、缩略图设置、数据库设置、邮箱设置、语言设置、第三方登录设置、手机网站设置、其它设置等 系统管理:自定义标签管理、数据库管理、数据库还原、频道模型管理、一键备份全站、操作日志管理、网站目录权限检测、菜单管理、区域管理 内容管理:频道管理、专题管理、类型管理、信息管理(各个频道信息增删改查) 互动管理:在线客服管理、第三方在线客服管理、订单管理、配送方式管理、支付方式管理、销售统计、资金管理、积分管理、优惠券管理、留言管理、人才招聘、评论管理 广告管理:幻灯片管理、幻灯分组管理、广告内容管理、邮件群发管理、订阅邮箱管理、邮件订阅分类管理、友情链接管理、友情链接分类管理 会员管理:会员信息管理、会员分组管理、会员功能设置、管理员信息管理、管理员分组管理 APP管理:内置APP端支持,在后台可以查看APP安装统计、活跃度分析! 网站优化:伪静态设置(是否启用伪静态、伪静态扩展名设置)、搜索引擎优化设置(页面标题Title、页面关键词Keywords、页面描述Description)、常用搜索引擎登录入口、生成网站地图、生成关键词内链 微信平台:微信绑定设置、基本信息设置、微信自定义菜单设置、小程序设置、微信功能设置、关注自动回复、关键词自动回复、地理位置自动回复、默认自动回复、微消息、微查询、微活动、微投票、微调查、微会员卡 模板管理:电脑模板管理(在线模板安装、模板选择、模板管理、样式管理)、手机模板管理(在线模板安装、模板选择、模板管理、样式管理) 插件管理:系统支持扩展插件,内置插件有:数据采集、三级分销、七牛云存储、邮件群发、图像批量处理等,可自行开发插件,无限功能自由扩展 缓存管理:一键清除系统所有缓存、HTML静态缓存管理(缓存时间设置、一键清除网站首页/频道首页/内容页面Html静态缓存) 源码更新日志: YouDianCMS 9.1版 1、增加后台在线升级功能,有新版本可以一键升级 2、后台界面UI优化 3、修复部分小BUG

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

leeshuqing

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值