Python 教程 14:字典基础

“一把钥匙开一把锁。”

字典(Dictionary)是 Python 中最灵活、最强大的数据结构之一。它通过"键-值对"的方式存储数据,就像真实世界的字典用单词查释义一样。

1. 什么是字典

字典是一个无序的、可变的键值对集合。

 1# 创建字典
 2empty_dict = {}  # 空字典
 3user = {
 4    "name": "张三",
 5    "age": 25,
 6    "city": "北京"
 7}
 8
 9# 使用dict()函数
10from_pairs = dict([("a", 1), ("b", 2)])
11from_keywords = dict(name="李四", age=30)
12
13# 字典推导式
14squares = {x: x**2 for x in range(5)}
15# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

2. 访问字典

 1user = {"name": "张三", "age": 25, "city": "北京"}
 2
 3# 方法1:[]访问
 4print(user["name"])  # 张三
 5# print(user["phone"])  # KeyError: 键不存在会报错
 6
 7# 方法2:get()方法(推荐)
 8print(user.get("name"))   # 张三
 9print(user.get("phone"))  # None(不报错)
10print(user.get("phone", "未设置"))  # 未设置(默认值)
11
12# 检查键是否存在
13print("name" in user)      # True
14print("phone" in user)     # False
15print("phone" not in user) # True

3. 修改字典

 1user = {"name": "张三", "age": 25}
 2
 3# 修改值
 4user["age"] = 26
 5print(user)  # {'name': '张三', 'age': 26}
 6
 7# 添加键值对
 8user["city"] = "上海"
 9print(user)  # {'name': '张三', 'age': 26, 'city': '上海'}
10
11# 删除键值对
12del user["city"]
13print(user)  # {'name': '张三', 'age': 26}
14
15# pop():删除并返回值
16age = user.pop("age")
17print(age)   # 26
18print(user)  # {'name': '张三'}
19
20# popitem():删除并返回最后一个键值对(3.7+有序)
21user = {"a": 1, "b": 2, "c": 3}
22item = user.popitem()
23print(item)  # ('c', 3)

4. 字典常用方法

获取键、值、项

 1user = {"name": "张三", "age": 25, "city": "北京"}
 2
 3# keys():所有键
 4print(user.keys())  # dict_keys(['name', 'age', 'city'])
 5print(list(user.keys()))  # ['name', 'age', 'city']
 6
 7# values():所有值
 8print(user.values())  # dict_values(['张三', 25, '北京'])
 9print(list(user.values()))  # ['张三', 25, '北京']
10
11# items():所有键值对
12print(user.items())
13# dict_items([('name', '张三'), ('age', 25), ('city', '北京')])
14
15# 转换为列表
16items_list = list(user.items())
17print(items_list)
18# [('name', '张三'), ('age', 25), ('city', '北京')]

更新和清空

 1user = {"name": "张三", "age": 25}
 2
 3# update():更新字典
 4user.update({"age": 26, "city": "北京"})
 5print(user)
 6# {'name': '张三', 'age': 26, 'city': '北京'}
 7
 8# 也可以用关键字参数
 9user.update(phone="13800138000")
10print(user)
11
12# clear():清空字典
13user.clear()
14print(user)  # {}

setdefault()

如果键存在,返回其值;否则设置默认值并返回:

 1user = {"name": "张三"}
 2
 3# 键存在,返回现有值
 4name = user.setdefault("name", "默认")
 5print(name)  # 张三
 6
 7# 键不存在,设置并返回默认值
 8age = user.setdefault("age", 18)
 9print(age)   # 18
10print(user)  # {'name': '张三', 'age': 18}

5. 遍历字典

 1user = {"name": "张三", "age": 25, "city": "北京"}
 2
 3# 遍历键
 4for key in user:
 5    print(key, user[key])
 6
 7# 遍历键(明确)
 8for key in user.keys():
 9    print(key)
10
11# 遍历值
12for value in user.values():
13    print(value)
14
15# 遍历键值对(最常用)
16for key, value in user.items():
17    print(f"{key}: {value}")

6. 字典的键

字典的键必须是不可变类型:

 1# 可以作为键的类型
 2d = {}
 3d[1] = "整数"
 4d[3.14] = "浮点数"
 5d["name"] = "字符串"
 6d[(1, 2)] = "元组"
 7
 8# 不能作为键的类型
 9# d[[1, 2]] = "列表"  # TypeError: 列表可变
10# d[{"a": 1}] = "字典"  # TypeError: 字典可变

为什么:字典内部用哈希表实现,键需要计算哈希值,可变对象的哈希值会变化。

7. 字典的值

值可以是任意类型,包括列表、字典等:

 1# 嵌套字典
 2student = {
 3    "name": "张三",
 4    "scores": {
 5        "math": 95,
 6        "english": 88
 7    },
 8    "friends": ["李四", "王五"]
 9}
10
11# 访问嵌套数据
12print(student["scores"]["math"])  # 95
13print(student["friends"][0])      # 李四

8. 字典的应用

应用 1:计数器

 1text = "hello world"
 2counter = {}
 3
 4for char in text:
 5    if char in counter:
 6        counter[char] += 1
 7    else:
 8        counter[char] = 1
 9
10print(counter)
11# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
12
13# 更简洁的写法
14counter = {}
15for char in text:
16    counter[char] = counter.get(char, 0) + 1

应用 2:配置管理

 1config = {
 2    "host": "localhost",
 3    "port": 8080,
 4    "debug": True,
 5    "database": {
 6        "user": "admin",
 7        "password": "secret"
 8    }
 9}
10
11print(config["database"]["user"])

应用 3:数据转换

 1# 映射表
 2weekdays = {
 3    1: "星期一",
 4    2: "星期二",
 5    3: "星期三",
 6    # ...
 7}
 8
 9day_num = 1
10print(weekdays.get(day_num, "无效日期"))

9. 字典与列表的对比

特性字典列表
访问方式索引
有序性有序(3.7+)有序
查找速度O(1)O(n)
适用场景键值映射序列数据

10. 小结

今天我们学习了字典的基础操作:

  • 创建{}dict()、字典推导式
  • 访问[]get()
  • 修改:赋值、delpop()
  • 方法:keys()、values()、items()、update()
  • 遍历:for-in 遍历键值对
  • 键的要求:必须不可变
  • 应用:计数、配置、映射

字典是 Python 最强大的数据结构之一,下一课我们将学习更高级的字典操作。


练习题

  1. 统计一个字符串中每个字符出现的次数
  2. 合并两个字典,相同键的值相加
  3. 反转字典(键值互换)

本文代码示例

关注公众号:极客老墨

更多 AI 应用开发、工程实践和效率工具分享,欢迎扫码关注。

极客老墨微信公众号二维码

相关阅读