python3 list<dictionary>格式数据统计


一、项目背景

1、项目需求

需要对python内的list< Dictionary >格式数据进行统计

2、实施时间

2020-12-17

二、 技术背景

1、阅读文章所需知识背景

1)具有少量python相关经验,了解数组、字典 、for循环语句用法

2、开发环境

1)Win10-64
2)Python 3.6.6

3、开发工具

1)Pycharm 2020.2.2

三、思考分析过程

1、确认数据格式

数据取自postgres数据库,取出后已处理成 list< Dictionary >格式。list中的每个Dictionary代表数据库中的一行数据,Dictionary中的key对应数据库表中的字段名,value对应该字段的具体数据。(下述数据已做模糊处理,以避免数据泄露风险。)

[
{'q_id': '953', 's_name': '程大花', 's_id': '10774',  'an_id': '001'},
{'q_id': '953', 's_name': '程二花', 's_id': '10774',  'an_id': '002'},
{'q_id': '954', 's_name': '程三花', 's_id': '10774',  'an_id': '001'},
{'q_id': '954', 's_name': '程四花', 's_id': '10774',  'an_id': '002'},
{'q_id': '955', 's_name': '程四花', 's_id': '10774',  'an_id': '001'},
{'q_id': '955', 's_name': '程四花', 's_id': '10774',  'an_id': '002'},
]

2、数据统计

为配合前端展示,需要python后端提供去重后的q_id数量。pandas等数据统计类库中应该有类似postgres count(distinct)的数据统计方式,可惜我个人并没有调研过pandas模块用法。

个人猜想count(distinct)方法应该是依次轮询每一条数据,遇到与之前不同的数据则计数+1,轮询完所有数据之后返回计数值。

依照上述思路,第一步我们使用for循环将q_id从list< dictionary >中取出

dataList = [
    {'q_id': '953', 's_name': '程大花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '953', 's_name': '程二花', 's_id': '10774', 'an_id': '002'},
    {'q_id': '954', 's_name': '程三花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '954', 's_name': '程四花', 's_id': '10774', 'an_id': '002'},
    {'q_id': '955', 's_name': '程四花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '955', 's_name': '程四花', 's_id': '10774', 'an_id': '002'},
]

for i in dataList:
    print(i["q_id"])

第二步我们需要判断q_id是否重复。这里我考虑了一下,有两个方案。
一个是创建一个空list,每次取出后使用python in判断,如果当前的q_id不在list中,那么则将当前的q_id存入list中,通过上述方式来去重。

dataList = [
    {'q_id': '953', 's_name': '程大花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '953', 's_name': '程二花', 's_id': '10774', 'an_id': '002'},
    {'q_id': '954', 's_name': '程三花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '954', 's_name': '程四花', 's_id': '10774', 'an_id': '002'},
    {'q_id': '955', 's_name': '程四花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '955', 's_name': '程四花', 's_id': '10774', 'an_id': '002'},
]

resultList = []

for i in dataList:
    if i["q_id"] not in resultList:
        resultList.append(i["q_id"])

print(resultList)

另一个同样需要先创建空list,每次取出后直接存入list,再利用set可创建不重复元素集的特性,来实现去重。

dataList = [
    {'q_id': '953', 's_name': '程大花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '953', 's_name': '程二花', 's_id': '10774', 'an_id': '002'},
    {'q_id': '954', 's_name': '程三花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '954', 's_name': '程四花', 's_id': '10774', 'an_id': '002'},
    {'q_id': '955', 's_name': '程四花', 's_id': '10774', 'an_id': '001'},
    {'q_id': '955', 's_name': '程四花', 's_id': '10774', 'an_id': '002'},
]

resultList = []

for i in dataList:
    resultList.append(i["q_id"])

print(list(set(resultList)))

这里要注意,set创建的是无序不重复数据集,若对去重后数据顺序有要求,那么这里是不推荐的。本次需求只需要统计数据量,因此使用set也没有影响。
最后我们只需要使用len()方法获取resultList长度即可得去重后q_id的数据量。

print(len(resultList))

总结

整个代码并不复杂,然而思考最是难能可贵。习惯使用他人封装的方法,未能深入思考其原理与实现方式,记此以自勉,切不可人云亦云放弃思考。
希望本文可以帮助到有需要的人。阅读本文的过程中如有任何问题欢迎随时与我联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值