Python 字典与集合

8.1 字典(Dictionary)基础

字典是键值对(key-value)的无序集合,通过键来访问值。

创建字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 空字典
empty = {}

# 字面量创建
person = {
"name": "Alice",
"age": 25,
"city": "Beijing"
}

# dict() 函数
person2 = dict(name="Bob", age=30, city="Shanghai")

# 从键值对列表创建
pairs = [("a", 1), ("b", 2), ("c", 3)]
d = dict(pairs)
print(d) # {'a': 1, 'b': 2, 'c': 3}

8.2 字典访问与修改

访问值

1
2
3
4
5
6
7
8
9
10
11
12
person = {"name": "Alice", "age": 25, "city": "Beijing"}

# 方括号访问
print(person["name"]) # Alice

# 键不存在会报错
# print(person["email"]) # KeyError

# get() 安全访问
print(person.get("age")) # 25
print(person.get("email")) # None
print(person.get("email", "N/A")) # N/A(默认值)

修改与添加

1
2
3
4
5
6
7
8
9
10
11
12
13
person = {"name": "Alice", "age": 25}

# 修改值
person["age"] = 26
print(person) # {'name': 'Alice', 'age': 26}

# 添加新键值对
person["email"] = "alice@example.com"
print(person) # {'name': 'Alice', 'age': 26, 'email': 'alice@example.com'}

# update() 批量更新
person.update({"age": 27, "city": "Shanghai"})
print(person)

8.3 字典删除操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
person = {"name": "Alice", "age": 25, "city": "Beijing"}

# del - 删除键
del person["city"]
print(person) # {'name': 'Alice', 'age': 25}

# pop() - 删除并返回值
age = person.pop("age")
print(age) # 25
print(person) # {'name': 'Alice'}

# popitem() - 删除最后一对(Python 3.7+)
person = {"a": 1, "b": 2, "c": 3}
key, value = person.popitem()
print(key, value) # c 3

# clear() - 清空字典
person.clear()
print(person) # {}

8.4 字典遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
person = {"name": "Alice", "age": 25, "city": "Beijing"}

# 遍历键(默认)
for key in person:
print(key)

# 遍历值
for value in person.values():
print(value)

# 遍历键值对
for key, value in person.items():
print(f"{key}: {value}")

# 输出:
# name: Alice
# age: 25
# city: Beijing

8.5 字典常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
d = {"a": 1, "b": 2, "c": 3}

# keys() - 所有键
print(d.keys()) # dict_keys(['a', 'b', 'c'])

# values() - 所有值
print(d.values()) # dict_values([1, 2, 3])

# items() - 所有键值对
print(d.items()) # dict_items([('a', 1), ('b', 2), ('c', 3)])

# setdefault() - 不存在则设置默认值
d.setdefault("d", 4)
print(d) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

# copy() - 浅拷贝
d2 = d.copy()

8.6 字典推导式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 基本语法
{键表达式: 值表达式 for 变量 in 可迭代对象}

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

# 条件过滤
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares) # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

# 键值交换
original = {"a": 1, "b": 2, "c": 3}
swapped = {v: k for k, v in original.items()}
print(swapped) # {1: 'a', 2: 'b', 3: 'c'}

8.7 嵌套字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
students = {
"Alice": {
"age": 20,
"grades": [85, 90, 78]
},
"Bob": {
"age": 22,
"grades": [92, 88, 95]
}
}

# 访问嵌套数据
print(students["Alice"]["age"]) # 20
print(students["Bob"]["grades"][0]) # 92

# 遍历
for name, info in students.items():
avg = sum(info["grades"]) / len(info["grades"])
print(f"{name} 平均分: {avg:.1f}")

8.8 集合(Set)基础

集合是无序、不重复的元素集合。

创建集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 空集合(注意:{} 是空字典)
empty_set = set()

# 字面量创建
fruits = {"apple", "banana", "orange"}

# set() 函数
text = "hello"
chars = set(text)
print(chars) # {'h', 'e', 'l', 'o'}

# 从列表创建(去重)
numbers = [1, 2, 2, 3, 3, 3]
unique = set(numbers)
print(unique) # {1, 2, 3}

8.9 集合操作

添加与删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
fruits = {"apple", "banana"}

# add() - 添加元素
fruits.add("orange")
print(fruits) # {'apple', 'banana', 'orange'}

# update() - 添加多个
fruits.update(["grape", "melon"])
print(fruits)

# remove() - 删除(不存在报错)
fruits.remove("banana")

# discard() - 删除(不存在不报错)
fruits.discard("banana")

# pop() - 随机删除并返回
item = fruits.pop()
print(item)

# clear() - 清空
fruits.clear()

集合运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}

# 并集
print(a | b) # {1, 2, 3, 4, 5, 6, 7, 8}
print(a.union(b))

# 交集
print(a & b) # {4, 5}
print(a.intersection(b))

# 差集
print(a - b) # {1, 2, 3}
print(a.difference(b))

# 对称差集(只在其中一个集合)
print(a ^ b) # {1, 2, 3, 6, 7, 8}
print(a.symmetric_difference(b))

8.10 集合应用

去重

1
2
3
numbers = [1, 2, 2, 3, 3, 3, 4, 5]
unique = list(set(numbers))
print(unique) # [1, 2, 3, 4, 5]

成员检查

1
2
3
4
5
fruits = {"apple", "banana", "orange"}

# 集合查找比列表快(O(1) vs O(n))
print("apple" in fruits) # True
print("grape" in fruits) # False

集合推导式

1
2
3
4
5
6
7
8
9
10
# 基本语法
{表达式 for 变量 in 可迭代对象}

# 示例
squares = {x**2 for x in range(1, 6)}
print(squares) # {1, 4, 9, 16, 25}

# 条件过滤
evens = {x for x in range(10) if x % 2 == 0}
print(evens) # {0, 2, 4, 6, 8}

8.11 字典 vs 集合

特性 字典(Dict) 集合(Set)
语法 {key: value} {value}
元素 键值对 唯一值
有序性 Python 3.7+ 有序 无序
用途 键值映射 去重、集合运算

8.12 本章小结

  • 字典是键值对集合,通过键访问值
  • 常用方法:get()keys()values()items()update()
  • 字典推导式:{键: 值 for 变量 in 可迭代对象}
  • 集合是无序、不重复的元素集合
  • 集合运算:|(并)、&(交)、-(差)、^(对称差)
  • 集合适合去重和快速成员检查

练习题

  1. 创建一个字典存储学生信息(姓名、年龄、成绩),计算平均分
  2. 输入一个字符串,统计每个字符出现的次数
  3. 给定两个列表,找出它们的共同元素和不同元素
  4. 以下代码输出什么?
    1
    2
    3
    d = {"a": 1, "b": 2}
    d.update({"b": 3, "c": 4})
    print(d)
ByteFisher
分享编程技术 · 记录钓鱼乐趣
扫码关注
▸ 扫码关注 ◂
Python基础教程 系列
第 8/20 篇
分享: