Python中如何筛选列表重复数据并组合封装成列表返回前端?

新手刚刚学习,两张表,多对多数据, 一张老师表(字段: id,name),一张班级表(字段:id,caption), 老师表中通过 cls = models.ManyToManyField('Classes') 关联班级表,同一个老师下面的不同的班级作为一个数组字典(字段:cls_list)封装; 代码贴在下面,感觉明显累赘了,求优雅的写法...

teacher_list = models.Teacher.objects.values('id', 'name', 'cls__id', 'cls__caption')
data = []
for t in teacher_list:
	if len(data) == 0:
		t = teacher_list.first()
		data.append({
			'nid': t['id'],
			'name': t['name'],
			'cls_list': [
				{'id': t['cls__id'], 'caption': t['cls__caption']}
			]
		})
	else:
		for i, v in enumerate(data):
			if t['id'] == v['nid']:
				data[i]['cls_list'].append({'id': t['cls__id'], 'caption': t['cls__caption']})
			elif i == len(data)-1:
				data.append({
					'nid': t['id'],
					'name': t['name'],
					'cls_list': [
						{'id': t['cls__id'], 'caption': t['cls__caption']}
					]
				})
response = json.dumps({'data': data})
return HttpResponse(response)

Python中如何筛选列表重复数据并组合封装成列表返回前端?

1 回复

def deduplicate_and_group(data_list):
    """
    筛选重复数据并分组封装
    返回格式: [[唯一值1, 出现次数], [唯一值2, 出现次数], ...]
    """
    from collections import Counter
    
    # 使用Counter统计每个元素的出现次数
    counter = Counter(data_list)
    
    # 将结果转换为列表格式
    result = [[item, count] for item, count in counter.items()]
    
    return result

# 使用示例
if __name__ == "__main__":
    # 测试数据
    test_data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
    
    # 处理数据
    processed_data = deduplicate_and_group(test_data)
    
    # 输出结果
    print("原始数据:", test_data)
    print("处理结果:", processed_data)
    # 输出: [[1, 1], [2, 2], [3, 3], [4, 4]]
    
    # 前端可直接使用这个列表
    # 例如在Flask中: return jsonify(processed_data)

这个方案用Counter统计频率,然后转成[值, 次数]的二维列表格式。如果前端需要其他格式,比如字典,可以改成return [{"value": k, "count": v} for k, v in counter.items()]

总结:用Counter统计再转换格式最直接。

回到顶部