🧩 字典是“可读性最高的数据容器”,集合是“去重性能之王”,掌握它们组合使用,你可以把业务逻辑写得又清晰又高效!
✅ 本文目标
- 深度掌握
dict
和set
常用操作 - 理解两者背后的“哈希查找”优势
- 实战构建一个数据去重聚合分析器
- 用
defaultdict
、Counter
写出精炼逻辑
📦 一、dict 核心操作回顾
user = {"name": "张三", "age": 18}
user["gender"] = "男" # 添加键值对
user["age"] = 20 # 更新值
print(user["name"]) # 获取值
⚠️ 推荐使用 .get()
避免报错
print(user.get("score", 0)) # 如果没有 score,就返回 0
🧩 二、set 的威力:天然去重 + 高效包含判断
nums = [1, 2, 2, 3, 3, 3]
unique = set(nums)
print(unique) # {1, 2, 3}
🚀 超快的“in”判断(底层哈希)
if 2 in unique:
print("存在!")
🧠 三、组合拳实战:构建一个“用户提交记录分析器”
假设你有如下数据结构:
records = [
{"user": "A", "tag": "AI"},
{"user": "B", "tag": "Python"},
{"user": "A", "tag": "Python"},
{"user": "A", "tag": "AI"}, # 重复
{"user": "C", "tag": "Go"},
]
🎯 目标:每个用户提交了哪些唯一主题
from collections import defaultdict
result = defaultdict(set)
for r in records:
result[r["user"]].add(r["tag"])
for user, tags in result.items():
print(f"👤 {user}:{tags}")
输出:
🧮 四、Counter:你还在手动计数?用它!
from collections import Counter
data = ["apple", "banana", "apple", "cherry", "banana", "banana"]
count = Counter(data)
print(count)
# Counter({'banana': 3, 'apple': 2, 'cherry': 1})
✅ 获取出现最多的元素
print(count.most_common(1)) # [('banana', 3)]
🛠 五、项目实战:关键词频率分析 + 用户分布统计
数据样例:
logs = [
{"user": "U1", "kw": "python"},
{"user": "U1", "kw": "python"},
{"user": "U2", "kw": "go"},
{"user": "U3", "kw": "python"},
{"user": "U3", "kw": "rust"},
]
统计每个关键词被多少用户搜索:
from collections import defaultdict
kw_users = defaultdict(set)
for log in logs:
kw_users[log["kw"]].add(log["user"])
for kw, users in kw_users.items():
print(f"🔍 关键词【{kw}】被 {len(users)} 个用户搜索")
输出:
💡 拓展挑战
- 用
dict + list
分析“每小时访问量” - 用
set
交集 / 差集 / 并集分析“共同关注” - 用
defaultdict + Counter
做词频统计器(多级嵌套)
🧠 总结一句话
真正的 Python 高手,90% 的数据处理都写在了
dict
和set
里,而且一行就能表达业务逻辑。