9、一行代码搞定数据结构:dict+set 组合拳教学

0 阅读2分钟

🧩 字典是“可读性最高的数据容器”,集合是“去重性能之王”,掌握它们组合使用,你可以把业务逻辑写得又清晰又高效!


✅ 本文目标

  • 深度掌握 dictset 常用操作
  • 理解两者背后的“哈希查找”优势
  • 实战构建一个数据去重聚合分析器
  • defaultdictCounter 写出精炼逻辑

📦 一、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}")

输出:

image.png


🧮 四、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)} 个用户搜索")

输出:

image.png


💡 拓展挑战

  1. dict + list 分析“每小时访问量”
  2. set 交集 / 差集 / 并集分析“共同关注”
  3. defaultdict + Counter 做词频统计器(多级嵌套)

🧠 总结一句话

真正的 Python 高手,90% 的数据处理都写在了 dictset 里,而且一行就能表达业务逻辑