• Python对数据进行分类统计


    在实际工作中,有时候我们需要对数据进行分类统计数量,一种是SQL利用group by进行统计,另一种可以用Python代码行来进行操作

    1. datas = [{'name': 'jack', 'gender': '男', 'address': '深圳'}, {'name': 'tom', 'gender': '男', 'address': '东莞'},
    2. {'name': 'jerry', 'gender': '男', 'address': '广州'}, {'name': 'alisi', 'gender': '女', 'address': '深圳'},
    3. {'name': 'rose', 'gender': '女', 'address': '北京'}, {'name': 'anna', 'gender': '女', 'address': '北京'},
    4. {'name': 'jack', 'gender': '男', 'address': '深圳'}, {'name': 'tom', 'gender': '男', 'address': '东莞'},
    5. {'name': 'jerry', 'gender': '女', 'address': '广州'}, {'name': 'alisi', 'gender': '女', 'address': '深圳'},
    6. {'name': 'rose', 'gender': '男', 'address': '北京'}, {'name': 'anna', 'gender': '女', 'address': '北京'}]

    1.分别统计每个城市的人数

    1. def statistical_data(datas):
    2. """
    3. :return: dict
    4. """
    5. res_dict = {}
    6. for data in datas:
    7. city = data.get('address')
    8. if city not in res_dict:
    9. res_dict[city] = 1 # 初始数量1
    10. else:
    11. res_dict[city] += 1 # 相同key对应的数量+1
    12. return res_dict
    13. result = statistical_data(datas)
    14. print(result)
    15. # {'深圳': 4, '东莞': 2, '广州': 2, '北京': 4}

    2.分别统计每个城市男女生对应的人数

    1. def statistical_data(datas):
    2. """
    3. :return: dict
    4. """
    5. res_dict = {}
    6. for data in datas:
    7. gender = data.get('gender')
    8. if gender == '男':
    9. num_list = [1, 0] # 第一个位置表示男的数量
    10. index = 0
    11. else:
    12. num_list = [0, 1] # 第二个位置表示女的数量
    13. index = 1
    14. city = data.get('address')
    15. if city not in res_dict:
    16. res_dict[city] = num_list # 初始列表
    17. else:
    18. res_dict[city][index] += 1 # 相同key对应的位置数量+1
    19. return res_dict
    20. result = statistical_data(datas)
    21. print(result)
    22. # {'深圳': [2, 2], '东莞': [2, 0], '广州': [1, 1], '北京': [1, 3]}

    3.字典数据按照value排序

    1. res = {'深圳': [2, 2], '东莞': [2, 0], '广州': [1, 1], '北京': [1, 3]}
    2. result = dict(sorted(res.items(), key=lambda x: sum(x[1]), reverse=True))
    3. print(result)
    4. # {'深圳': [2, 2], '北京': [1, 3], '东莞': [2, 0], '广州': [1, 1]}

    扩展:

    这类代码也可以封装一下,作为一个常用的公共类视图

    1. class PublicFunc(object):
    2. def __init__(self, datas):
    3. self.datas = datas
    4. def statistical_data(self):
    5. """
    6. :return: dict
    7. """
    8. res_dict = {}
    9. for data in self.datas:
    10. city = data.get('address')
    11. if city not in res_dict:
    12. res_dict[city] = 1 # 初始数量1
    13. else:
    14. res_dict[city] += 1 # 相同key对应的数量+1
    15. return res_dict
    16. def style_data(self,datas):
    17. """
    18. :param datas: dict
    19. :return: dict
    20. """
    21. name_list = []
    22. value_list = []
    23. for k,v in datas.items():
    24. name_list.append(k)
    25. value_list.append(v)
    26. return {'name':name_list,'value':value_list}
    27. public_func = PublicFunc(datas)
    28. res = public_func.statistical_data()
    29. result = dict(sorted(res.items(), key=lambda x: x[1], reverse=True))
    30. print(result)
    31. # {'深圳': 4, '北京': 4, '东莞': 2, '广州': 2}
    32. result2 = public_func.style_data(result)
    33. print(result2)
    34. # {'name': ['深圳', '北京', '东莞', '广州'], 'value': [4, 4, 2, 2]}

  • 相关阅读:
    LeetCode第317场周赛打卡
    一个小台灯
    前端展示ftp文件目录
    jvm中对象内存空间的分配与回收
    Linux 使用 atop 监控工具
    vscode提取扩展出错xhr
    Win32 COLORREF、RGB、获取颜色分量
    递归练习题
    解决github打开慢的问题
    【C基础篇】选择结构与循环控制
  • 原文地址:https://blog.csdn.net/wangzhiping321/article/details/125468341