数据重组

# 需求说明:将data_source分类统计,并输出为如下data_final的形式:
# data_final ===》
# {
# 'area': [{'place': '南山区', 'amount': 3}, {'place': '宝安区', 'amount': 3}],
# 'type': {'other': 3, 'govenment': 1, 'education': 1, 'business': 1}
# } def class_sum(data_source_list, class_key_name, sum_key_name):
'''对一堆相似字典进行分类统计 :param data_source_list: 原始数据,列表中放字典。如:[{"c":"c1","count":2},{"c":"c2","count":1},{"c":"c1","count":1}]
:param class_key_name: 分类的key名称。如"c"
:param sum_key_name: 统计计数的key名称。如"count"
:return:分类清单 和 对应的统计计数。如:list_class=["c1", "c2"] 和 list_sum=[3, 1]
'''
list_class = []
list_sum = []
for dict_tmp in data_source_list:
sum_tmp = 0
# print(dict_tmp)
if class_key_name in dict_tmp:
if dict_tmp[class_key_name] not in list_class:
list_class.append(dict_tmp[class_key_name])
sum_tmp += dict_tmp[sum_key_name]
list_sum.append(sum_tmp)
else:
sum_index = list_class.index(dict_tmp[class_key_name])
sum_tmp = list_sum[sum_index]+dict_tmp[sum_key_name]
list_sum[sum_index] = sum_tmp
return (list_class, list_sum) data_source = [
{
"town_name": "南山区",
"type": "other",
"count": 1
},
{
"town_name": "南山区",
"type": "govenment",
"count": 1
},
{
"town_name": "南山区",
"type": "education",
"count": 1
},
{
"town_name": "宝安区",
"type": "other",
"count": 2
},
{
"town_name": "宝安区",
"type": "business",
"count": 1
}
] for dict_tmp in data_source:
print(dict_tmp) data_final = {}
data_final['area'] = []
data_final['type'] = {} # 1.1、按照town_name分类和统计count
list_class, list_sum = class_sum(data_source, "town_name", 'count') print(1111111111111)
print(list_class)
print(list_sum) # 2.1 组装area:根据town_name分类和统计
data_final["area"] = list(map(lambda x, y: {"place": x, "amount": y}, list_class, list_sum)) # 1.2、按照type分类和统计count
list_class, list_sum = class_sum(data_source, "type", 'count') print(2222222222222)
print(list_class)
print(list_sum) # 2.2 组装type:根据type分类和统计
for c in list_class:
data_final["type"][c] = list_sum[list_class.index(c)]
print(data_final) # 想要的 {'area': [{'amount': 3, 'place': '南山区'}, {'amount': 3, 'place': '宝安区'}], 'type':{'other': 3, 'govenment': 1, 'education': 1, 'business': 1}}

  

输出:

数据重组:对一堆相似字典进行分类统计(shidebin)的更多相关文章

  1. 【DG】Oracle_Data_Guard官方直译

    [DG]Oracle Data Guard官方直译 1 Oracle Data Guard 介绍   Oracle Data Guard概念和管理10g版本2   Oracle Data Guard ...

  2. DVWA实验之Brute Force(暴力破解)- Low

    DVWA实验之Brute Force-暴力破解- Low     这里开始DVWA的相关实验~   有关DVWA环境搭建的教程请参考: https://www.cnblogs.com/0yst3r-2 ...

  3. Oracle错误览表

    Oracle 错误总结及问题解决 ORA     本文转自:https://www.cnblogs.com/zhangwei595806165/p/4972016.html  作者@承影剑 ORA-0 ...

  4. Dictionary Learning(字典学习、稀疏表示以及其他)

    第一部分 字典学习以及稀疏表示的概要 字典学习(Dictionary Learning)和稀疏表示(Sparse Representation)在学术界的正式称谓应该是稀疏字典学习(Sparse Di ...

  5. Hihicoder 题目1 : Trie树(字典树,经典题)

    题目1 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编 ...

  6. UVA - 11488 字典树

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  7. POJ 2418 字典树

    题目链接:http://poj.org/problem?id=2418 题意:给定一堆树的名字,现在问你每一棵树[无重复]的出现的百分比,并按树名的字典序输出 思路:最简单的就是用map来写,关于字典 ...

  8. hdu1251 字典树or map

    一道字典树的题,不过看起来用map更为简单 传送门 题意: 给出一堆字符串构成一个字典,求字典里以某字符串为前缀的字符串有几个 思路: 输入字符串时把字符串的前缀全部存进map并标记次数 查询时直接输 ...

  9. HDU 4825 Xor Sum(经典01字典树+贪心)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

随机推荐

  1. Java如何获取本地计算机的IP地址和主机名?

    在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com. ...

  2. Linux 目录结构_004

    前言 Linux文件系统层次标准,英文全称Filesystem Hierarchy Standard,英文简称FHS. 由于利用Linux来开发产品的团队和个人实在太多了,如果每个人都以自己的想法来配 ...

  3. centos7目录统计之du命令

    CentOS下du查看计算目录大小的命令 用法实例: [root@localhost local]# du -hs smgpdfd 3.3G    smgpdfd [root@localhost lo ...

  4. Spark学习笔记——文本处理技术

    1.建立TF-IDF模型 import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.mllib.linalg. ...

  5. laravel 5 : Class 'input' not found

     在配置文件中:config\app.php 加上 'Input' => Illuminate\Support\Facades\Input::class, 或者 引用 :use Illumina ...

  6. 设计模式-创建型模式,python享元模式 、python单例模式(7)

    享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝 ...

  7. zeromq使用模式实验总结

    zeromq:官网 安装  demo及各语言绑定 golang绑定 实验环境:win10 x64/centos6 x86 zeromq4.0.6 zmq三种模式:push/pull.pub/sub.r ...

  8. js的server worker创建子进程

    类似nodejs的 child_process.fork() // index.html 主线程 function isClose(data){ if(data === 0) return true; ...

  9. FIFO设计中的深度计算【zz】

    FIFO设计中的深度计算: 写时钟频率 w_clk, 读时钟频率 r_clk, 写时钟周期里,每B个时钟周期会有A个数据写入FIFO: 读时钟周期里,每Y个时钟周期会有X个数据读出FIFO: 则,FI ...

  10. Nodejs----基本数据类型

    Nodejs基本数据类型: nodejs的基础JavaScript(脚本语言). 而大多数的