Python3 字典

Python3 字典(Dictionary)


🎯 学习目标

掌握 Python 中字典的定义、操作方法及实际应用场景,理解其键值对结构高效查找机制。能够在项目中灵活使用字典进行数据组织、统计分析和动态配置管理。


🔑 核心重点

分类 内容
基本结构 使用 {}dict() 创建字典
键值特性 键必须是不可变类型(如字符串、数字、元组)
操作方法 增删查改、遍历、合并、默认值处理
实际应用场景 数据映射、缓存、配置文件、JSON 解析等
性能优化技巧 使用 get()setdefault()collections.defaultdict()

📚 详细讲解

一、什么是字典?

字典(Dictionary)是 Python 中最常用的数据结构之一,用于存储键值对(key-value pairs),是一种无序的、可变的集合类型

✅ 定义方式:

d1 = {"name": "Alice", "age": 25, "city": "Beijing"}
d2 = dict(name="Bob", age=30)
d3 = dict([("x", 1), ("y", 2)])  # 从列表创建
d4 = {}  # 空字典

📌 特点

  • 键必须是不可变类型(如 str, int, tuple
  • 值可以是任意类型
  • 不允许重复键,后出现的键会覆盖前面的值

二、字典的基本操作

✅ 1. 访问元素

user = {"name": "Charlie", "age": 22}
print(user["name"])   # 输出:Charlie

⚠️ 若访问不存在的键会抛出 KeyError,建议使用 .get()


✅ 2. 添加或修改元素

user["email"] = "charlie@example.com"  # 添加新键值对
user["age"] = 23                         # 修改已有键值

✅ 3. 删除元素

del user["email"]
user.pop("age")      # 删除指定键并返回值
user.clear()         # 清空字典

三、字典常用方法

方法名 描述 示例
d[key] 获取键对应的值 d["name"]
d.get(key[, default]) 获取值(若不存在不报错) d.get("age", 0)
d.keys() 返回所有键 list(d.keys())
d.values() 返回所有值 list(d.values())
d.items() 返回键值对(元组形式) list(d.items())
d.pop(key[, default]) 删除键并返回值 d.pop("age", 0)
d.update(other_dict) 合并另一个字典 d.update({"city": "Shanghai"})
d.setdefault(key[, default]) 若键不存在则设置默认值 d.setdefault("score", [])

四、字典推导式(Dictionary Comprehensions)

Python 特有的简洁语法,用于快速构建字典。

✅ 基本格式:

squares = {x: x**2 for x in range(6)}
print(squares)  
# 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

✅ 条件筛选:

evens = {k: v for k, v in squares.items() if v % 2 == 0}
print(evens)
# 输出:{0: 0, 2: 4, 4: 16}

五、嵌套字典与复杂结构

✅ 示例:用户信息嵌套结构

users = {
    "alice": {
        "name": "Alice",
        "age": 25,
        "hobbies": ["reading", "music"]
    },
    "bob": {
        "name": "Bob",
        "age": 30,
        "hobbies": ["coding", "gaming"]
    }
}

print(users["alice"]["hobbies"][0])  # 输出:reading

✅ 遍历嵌套字典:

for username, info in users.items():
    print(f"用户名:{username}")
    for key, value in info.items():
        print(f"{key}: {value}")

六、默认值处理与高级用法

✅ 1. dict.get(key, default)

避免 KeyError,推荐使用:

print(user.get("gender", "未知"))  # 默认返回“未知”

✅ 2. dict.setdefault(key, default)

如果键不存在就设置默认值,适合初始化列表或计数器:

scores = {}
scores.setdefault("math", []).append(90)
scores.setdefault("math", []).append(85)
print(scores)  # {'math': [90, 85]}

✅ 3. collections.defaultdict

自动为不存在的键设置默认值类型:

from collections import defaultdict

dd = defaultdict(list)
dd["fruits"].append("apple")
dd["fruits"].append("banana")
print(dd["vegetables"])  # 输出:[] (不会报错)

⚠️ 注意事项

  • 字典是无序的(Python 3.7+ 保持插入顺序,但逻辑上仍应视为无序)
  • 键必须是不可变对象(如 int, str, tuple),不能是 listdict
  • 避免在遍历过程中修改字典大小(如删除/添加键),否则可能引发异常或跳过项
  • 使用 in 判断键是否存在,而不是判断值
  • 多层嵌套字典应使用 get() 避免 KeyError

🧪 实际案例分析

📌 场景:统计单词频率

给定一段英文文本,统计每个单词出现的次数。

text = """
Python is great and Python is easy to learn.
You should learn Python now!
"""

import string

# 去除标点符号
translator = str.maketrans('', '', string.punctuation)
cleaned_text = text.translate(translator).lower()

# 统计词频
word_count = {}
for word in cleaned_text.split():
    word_count[word] = word_count.get(word, 0) + 1

print(word_count)

📌 输出示例

{'python': 3, 'is': 2, 'great': 1, 'and': 1, 'easy': 1, 'to': 1, 'learn': 1, 'you': 1, 'should': 1, 'now': 1}

📌 应用

  • 文本分析
  • 自然语言处理
  • 关键词提取
  • 日志统计工具

🧩 拓展练习(动手实践)

  1. 编写一个函数 merge_dicts(*dicts),将多个字典合并为一个,冲突键以最后一个为准。
  2. 输入一组学生数据(学号、姓名、成绩),使用字典按学号组织,并支持按姓名查找。
  3. 实现一个电话簿程序,支持添加、查询、删除联系人信息。
  4. 使用字典实现斐波那契数列的缓存计算(记忆化递归)。
  5. 编写程序读取 JSON 文件内容并转换为 Python 字典,打印其中某些字段。

📚 推荐阅读


🧭 下一步建议

  • 下一章学习内容:《Python3 集合(Set)详解》
  • 掌握集合的去重、交并差运算等数学特性
  • 学习集合与字典的结合使用
  • 探索集合在数据分析、去重清洗中的应用
  • 结合字典与集合知识,尝试编写数据统计与分析程序

如果你希望我为你提供:

  • Python 字典常用方法速查表 PDF
  • 更多实战项目练习题(如通讯录系统、缓存实现、词频统计器等)
  • 字典推导式高级用法详解
  • 字典性能调优指南(如内存占用、查找效率等)
  • 视频教学资源推荐(中文讲解)

欢迎随时告诉我 😊

posted @ 2025-05-28 00:05  红尘过客2022  阅读(51)  评论(0)    收藏  举报