Python字典核心秘籍:从键值对到嵌套结构,20+实战案例轻松掌握
Python字典(Dictionary)知识点教程
一、字典的定义与特性
- 定义:字典是可变的、无序的键值对集合,用花括号 {} 定义,键值对用 键: 值 表示。
person = {"name": "Alice", "age": 25}
empty_dict = {} # 空字典
- 特性:
- 键唯一性:键必须是不可变类型(如字符串、数字、元组),且不可重复。
- 值无限制:值可以是任意数据类型(包括列表、字典等)。
- 高效查找:通过键直接访问值,时间复杂度为 O(1)。
二、字典的基本操作
操作 | 示例 | 说明 |
访问值 | person["name"] → "Alice" | 通过键获取值(键不存在时报错) |
添加/修改键值对 | person["city"] = "New York" | 键存在则修改,不存在则添加 |
删除键值对 | del person["age"] | 删除指定键的键值对 |
检查键是否存在 | "name" in person → True | 判断键是否在字典中 |
三、字典常用方法
方法 | 示例 | 功能说明 |
dict.get(key, default) | person.get("age", 0) → 25 | 安全获取值(键不存在返回 default) |
dict.keys() | person.keys() → ["name", "age"] | 返回所有键的视图对象 |
dict.values() | person.values() → ["Alice", 25] | 返回所有值的视图对象 |
dict.items() | person.items() → [("name", "Alice"), ("age", 25)] | 返回所有键值对的视图对象 |
dict.update(other) | person.update({"age": 26}) | 合并其他字典的键值对(覆盖重复键) |
dict.pop(key) | person.pop("age") → 25 | 删除键并返回对应的值 |
dict.clear() | person.clear() → {} | 清空字典 |
四、字典推导式
- 快速生成字典:
squares = {x: x**2 for x in range(5)} # {0:0, 1:1, 2:4, 3:9, 4:16}
五、嵌套字典
- 字典的值可以是字典或其他容器:
students = {
"Alice": {"age": 20, "grade": "A"},
"Bob": {"age": 22, "grade": "B"}
}
print(students["Alice"]["age"]) # 20
20道练习题 & 答案
基础题
- 创建字典 {"a": 1, "b": 2},输出键 "b" 的值。
答案:print({"a":1, "b":2}["b"]) → 2 - 添加键值对 "c": 3 到字典 d = {"a": 1} 中。
答案:d["c"] = 3 - 删除字典 {"x": 10, "y": 20} 中的键 "x"。
答案:del d["x"] 或 d.pop("x") - 检查键 "name" 是否在字典 person = {"age": 25} 中。
答案:print("name" in person) → False - 合并两个字典 d1 = {"a":1} 和 d2 = {"b":2}。
答案:d1.update(d2) → {"a":1, "b":2}
进阶题
- 用 get 方法安全获取字典 {"a": 1} 中键 "b" 的值,默认返回 0。
答案:d.get("b", 0) → 0 - 将字典 {"a":1, "b":2} 的键和值分别转换为列表。
答案:
keys = list(d.keys()) # ["a", "b"]
values = list(d.values()) # [1, 2]
- 用字典推导式生成 {1: 1, 2: 4, 3: 9}。
答案:{x: x**2 for x in [1,2,3]} - 遍历字典 {"a":1, "b":2},打印键值对。
答案:
for key, value in d.items():
print(key, value) # a 1 \n b 2
- 将列表 ["a", "b", "c"] 转换为字典,值设为索引。
答案:{k: i for i, k in enumerate(lst)} → {"a":0, "b":1, "c":2}
应用题
- 统计字符串 "apple" 中每个字符的出现次数。
答案:
s = "apple"
count = {}
for char in s:
count[char] = count.get(char, 0) + 1
print(count) # {'a':1, 'p':2, 'l':1, 'e':1}
- 将两个列表合并为字典:keys = ["a", "b"], values = [1, 2]。
答案:dict(zip(keys, values)) → {"a":1, "b":2} - 反转字典的键和值:{"a":1, "b":2} → {1:"a", 2:"b"}。
答案:
reversed_dict = {v: k for k, v in d.items()}
- 筛选字典 {"a":5, "b":1, "c":8} 中值大于 3 的键值对。
答案:
{k: v for k, v in d.items() if v > 3} # {"a":5, "c":8}
- 处理嵌套字典,获取 students["Alice"]["age"] 的值。
答案:
students = {"Alice": {"age": 20}}
print(students["Alice"]["age"]) # 20
挑战题
- 合并多个字典(重复键的值相加):d1 = {"a":1}, d2 = {"a":2, "b":3}。
答案:
from collections import defaultdict
merged = defaultdict(int)
for d in [d1, d2]:
for k, v in d.items():
merged[k] += v
print(dict(merged)) # {"a":3, "b":3}
- 按值对字典 {"a":3, "b":1, "c":2} 排序。
答案:
sorted_dict = dict(sorted(d.items(), key=lambda x: x[1])) # {"b":1, "c":2, "a":3}
- 将字典转换为 JSON 字符串(使用 json 模块)。
答案:
import json
json_str = json.dumps({"a":1}) # '{"a": 1}'
- 实现字典的深拷贝(嵌套字典完全独立)。
答案:
import copy
d1 = {"a": [1,2]}
d2 = copy.deepcopy(d1)
- 找出两个字典的公共键:d1 = {"a":1, "b":2}, d2 = {"b":3, "c":4}。
答案:
common_keys = d1.keys() & d2.keys() # {"b"}
通过练习,可以熟练掌握Python字典的核心操作、高级用法及实际场景应用!