前言
大家好,我是倔强青铜三 。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!
欢迎来到 Python 百日冲刺第 35 天!
今天,我们把前面学到的列表、字典、集合、itertools
、collections
全部拉出来遛弯------用一道贴近实战的数据结构小题验收成果。
🎯 任务速览
你拿到一份线上商城的订单列表,每条订单包含:
- 顾客姓名
customer
- 商品名称
product
- 数量
quantity
- 单价
price
完成 3 个 KPI:
- 统计 每位顾客累计消费金额。
- 找出 销量最高的 3 款商品。
- 公布 单笔价值最大的订单。
📦 原始订单数据
python
orders = [
{'customer': 'Alice', 'product': 'Pen', 'quantity': 3, 'price': 5},
{'customer': 'Bob', 'product': 'Notebook', 'quantity': 2, 'price': 15},
{'customer': 'Alice', 'product': 'Notebook', 'quantity': 1, 'price': 15},
{'customer': 'Dave', 'product': 'Pen', 'quantity': 10, 'price': 5},
{'customer': 'Carol', 'product': 'Pen', 'quantity': 1, 'price': 5},
{'customer': 'Bob', 'product': 'Pen', 'quantity': 2, 'price': 5},
{'customer': 'Alice', 'product': 'Pencil', 'quantity': 5, 'price': 2},
]
🛠️ 分步拆解
✅ 1. 每位顾客累计消费
利用 defaultdict(float)
一键累加:
python
from collections import defaultdict
customer_totals = defaultdict(float)
for order in orders:
name = order['customer']
total = order['quantity'] * order['price']
customer_totals[name] += total
print("💰 每位顾客累计消费")
for customer, total in customer_totals.items():
print(f"{customer}: ¥{total}")
✅ 2. 销量 Top 3 商品
Counter
两行搞定:
python
from collections import Counter
product_counter = Counter()
for order in orders:
product_counter[order['product']] += order['quantity']
print("\n📦 销量 Top 3")
for product, qty in product_counter.most_common(3):
print(f"{product}: {qty} 件")
✅ 3. 单笔最壕订单
max()
搭配 lambda,一眼锁定:
python
max_order = max(orders, key=lambda o: o['quantity'] * o['price'])
print("\n💎 单笔最壕订单")
print(max_order)
🔎 运行结果
yaml
💰 每位顾客累计消费
Alice: ¥40.0
Bob: ¥40.0
Dave: ¥50.0
Carol: ¥5.0
📦 销量 Top 3
Pen: 16 件
Pencil: 5 件
Notebook: 3 件
💎 单笔最壕订单
{'customer': 'Dave', 'product': 'Pen', 'quantity': 10, 'price': 5}
🧠 知识点复盘
defaultdict
:按组累加,告别手动判空Counter
:统计频次,.most_common()
一键排序max(key=...)
:自定义排序维度- 字典取值 + 列表推导:保持代码简洁
🧪 进阶任务
- 按消费额给顾客排序并输出排行榜
- 计算每款商品带来的总收入
- 找出消费金额超过 ¥40 的 VIP 顾客
最后感谢阅读!欢迎关注我,微信公众号 :
倔强青铜三
。欢迎点赞
、收藏
、关注
,一键三连!!!