数据重组
# 需求说明:将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}}
输出: