求助,如何将数据类型转换成指定的?
data = [
('连衣裙', '白色', 'S', 1),
('连衣裙', '白色', 'S', 1),
('连衣裙', '黑色', 'M', 1),
('裤子', '白色', 'S', 1),
]
result = [
('连衣裙', '白色', 'S', 2, 3),
('连衣裙', '白色', 'M', 1, 3),
('裤子', '白色', 'S', 1, 1),
]
求助大佬如何将data的数据转换成result这种,效果就是统计标题相同的颜色尺码数量,最后一个是总计,并以从高到低排序, 举例只有少量数据,实际数据有几千个
回复
1个回答
test
2024-07-05
参考一下这个实现吧
from collections import Counter
data = [
('连衣裙', '白色', 'S', 1),
('连衣裙', '白色', 'S', 1),
('连衣裙', '黑色', 'M', 1),
('裤子', '白色', 'S', 1),
]
# 计算每个 (标题, 颜色, 尺码) 的数量
counter = Counter(tuple(x[:-1]) for x in data)
# 计算每个标题的总数
title_counts = Counter(x[0] for x in data)
# 构建结果列表
result = [(key[0], key[1], key[2], count, title_counts[key[0]]) for key, count in counter.items()]
# 根据总数从高到低排序
result.sort(key=lambda x: (-x[4], x[0], x[1], x[2]))
print(result)
输出:
[ ('连衣裙', '白色', 'S', 2, 3), ('连衣裙', '黑色', 'M', 1, 3), ('裤子', '白色', 'S', 1, 1),]
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容