栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python对数据进行分类统计

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python对数据进行分类统计

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

datas = [{'name': 'jack', 'gender': '男', 'address': '深圳'}, {'name': 'tom', 'gender': '男', 'address': '东莞'},
         {'name': 'jerry', 'gender': '男', 'address': '广州'}, {'name': 'alisi', 'gender': '女', 'address': '深圳'},
         {'name': 'rose', 'gender': '女', 'address': '北京'}, {'name': 'anna', 'gender': '女', 'address': '北京'},
         {'name': 'jack', 'gender': '男', 'address': '深圳'}, {'name': 'tom', 'gender': '男', 'address': '东莞'},
         {'name': 'jerry', 'gender': '女', 'address': '广州'}, {'name': 'alisi', 'gender': '女', 'address': '深圳'},
         {'name': 'rose', 'gender': '男', 'address': '北京'}, {'name': 'anna', 'gender': '女', 'address': '北京'}]
1.分别统计每个城市的人数
def statistical_data(datas):
    """
    :return: dict
    """
    res_dict = {}
    for data in datas:
        city = data.get('address')
        if city not in res_dict:
            res_dict[city] = 1  # 初始数量1
        else:
            res_dict[city] += 1  # 相同key对应的数量+1
    return res_dict

result = statistical_data(datas)
print(result)
# {'深圳': 4, '东莞': 2, '广州': 2, '北京': 4}
2.分别统计每个城市男女生对应的人数
def statistical_data(datas):
    """
    :return: dict
    """
    res_dict = {}
    for data in datas:
        gender = data.get('gender')
        if gender == '男':
            num_list = [1, 0]  # 第一个位置表示男的数量
            index = 0
        else:
            num_list = [0, 1]  # 第二个位置表示女的数量
            index = 1
        city = data.get('address')
        if city not in res_dict:
            res_dict[city] = num_list  # 初始列表
        else:
            res_dict[city][index] += 1  # 相同key对应的位置数量+1
    return res_dict

result = statistical_data(datas)
print(result)
# {'深圳': [2, 2], '东莞': [2, 0], '广州': [1, 1], '北京': [1, 3]}
3.字典数据按照value排序
res = {'深圳': [2, 2], '东莞': [2, 0], '广州': [1, 1], '北京': [1, 3]}
result = dict(sorted(res.items(), key=lambda x: sum(x[1]), reverse=True))

print(result)
# {'深圳': [2, 2], '北京': [1, 3], '东莞': [2, 0], '广州': [1, 1]}
扩展:

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

class PublicFunc(object):
    def __init__(self, datas):
        self.datas = datas

    def statistical_data(self):
        """
        :return: dict
        """
        res_dict = {}
        for data in self.datas:
            city = data.get('address')
            if city not in res_dict:
                res_dict[city] = 1  # 初始数量1
            else:
                res_dict[city] += 1  # 相同key对应的数量+1
        return res_dict

    def style_data(self,datas):
        """
        :param datas: dict
        :return: dict
        """
        name_list = []
        value_list = []
        for k,v in datas.items():
            name_list.append(k)
            value_list.append(v)

        return {'name':name_list,'value':value_list}

public_func = PublicFunc(datas)
res = public_func.statistical_data()

result = dict(sorted(res.items(), key=lambda x: x[1], reverse=True))

print(result)
# {'深圳': 4, '北京': 4, '东莞': 2, '广州': 2}
result2 = public_func.style_data(result)
print(result2)
# {'name': ['深圳', '北京', '东莞', '广州'], 'value': [4, 4, 2, 2]}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994884.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号