目录
第一部分:字典基础
-
字典的概念和特点
-
创建字典的多种方法
-
访问字典元素
-
字典的基本操作
第二部分:字典操作与方法
-
添加、修改和删除元素
-
字典常用方法详解
-
字典的遍历技巧
第三部分:字典高级应用
-
嵌套字典
-
字典推导式
-
字典与JSON数据转换
-
有序字典和默认字典
第四部分:综合实战案例
-
学生成绩管理系统
-
单词频率统计器
-
简易数据库查询系统
详细内容
第一部分:字典基础
1.1 字典的概念和特点
字典是Python中一种可变容器模型,可存储任意类型对象 字典的每个键值对用冒号(:)分割,整个字典包括在花括号({})中 键必须是唯一的,但值则不必
# 创建一个空字典
empty_dict = {}
print("空字典:", empty_dict)
# 创建带有键值对的字典
student = {"name": "张三", "age": 20, "major": "计算机科学"}
print("学生信息:", student)
# 使用dict()构造函数创建字典
fruit_dict = dict(apple=5, banana=3, orange=8)
print("水果字典:", fruit_dict)
1.2 访问字典元素
# 访问字典中的值
student = {"name": "张三", "age": 20, "major": "计算机科学"}
# 使用键访问值
print("学生姓名:", student["name"])
# 使用get()方法访问值(更安全,不会因键不存在而报错)
print("学生年龄:", student.get("age"))
print("不存在的键:", student.get("grade", "键不存在")) # 提供默认值
# 检查键是否存在
if "major" in student:
print("专业:", student["major"])
1.3 字典的基本操作
# 字典长度
print("字典长度:", len(student))
# 更新字典 - 添加新键值对
student["grade"] = "大三"
print("添加年级后:", student)
# 删除键值对
del student["grade"]
print("删除年级后:", student)
# 清空字典
student.clear()
print("清空后:", student)
第二部分:字典操作与方法
2.1 添加、修改和删除元素
# 创建示例字典
inventory = {"苹果": 50, "香蕉": 25, "橙子": 30}
print("初始库存:", inventory)
# 添加新元素
inventory["葡萄"] = 40
print("添加葡萄后:", inventory)
# 修改元素
inventory["苹果"] = 45
print("修改苹果数量后:", inventory)
# 使用update()方法合并字典
new_items = {"西瓜": 15, "芒果": 20}
inventory.update(new_items)
print("合并新商品后:", inventory)
# 删除元素的多种方法
# pop() - 删除指定键并返回其值
removed_item = inventory.pop("香蕉")
print(f"删除香蕉: {removed_item}, 剩余库存: {inventory}")
# popitem() - 删除最后插入的键值对(Python 3.7+有序)
last_item = inventory.popitem()
print(f"删除最后一项: {last_item}, 剩余库存: {inventory}")
2.2 字典常用方法详解
# 创建示例字典
person = {"name": "李四", "age": 25, "city": "北京", "occupation": "工程师"}
# keys() - 返回所有键
print("所有键:", list(person.keys()))
# values() - 返回所有值
print("所有值:", list(person.values()))
# items() - 返回所有键值对
print("所有键值对:", list(person.items()))
# copy() - 创建字典的浅拷贝
person_copy = person.copy()
print("字典拷贝:", person_copy)
# setdefault() - 如果键不存在,设置默认值
person.setdefault("country", "中国")
print("设置默认国家后:", person)
# 尝试获取已存在的键(不会改变值)
existing_value = person.setdefault("city", "上海")
print("已存在键的值:", existing_value)
2.3 字典的遍历技巧
# 创建示例字典
scores = {"数学": 90, "语文": 85, "英语": 92, "物理": 88, "化学": 95}
# 遍历所有键
print("所有科目:")
for subject in scores.keys():
print("-", subject)
# 遍历所有值
print("所有分数:")
for score in scores.values():
print("-", score)
# 遍历所有键值对
print("科目和分数:")
for subject, score in scores.items():
print(f"- {subject}: {score}")
# 使用enumerate()获取索引
print("带索引的遍历:")
for i, (subject, score) in enumerate(scores.items(), 1):
print(f"{i}. {subject}: {score}")
# 条件遍历
print("高分科目(>=90):")
for subject, score in scores.items():
if score >= 90:
print(f"- {subject}: {score}")
第三部分:字典高级应用
3.1 嵌套字典
# 创建嵌套字典 - 学生信息管理系统
students = {
"001": {
"name": "张三",
"age": 20,
"grades": {"数学": 90, "语文": 85, "英语": 92}
},
"002": {
"name": "李四",
"age": 21,
"grades": {"数学": 88, "语文": 92, "英语": 85}
},
"003": {
"name": "王五",
"age": 19,
"grades": {"数学": 95, "语文": 87, "英语": 90}
}
}
# 访问嵌套字典的值
print("学生001的姓名:", students["001"]["name"])
print("学生002的数学成绩:", students["002"]["grades"]["数学"])
# 添加新学生
students["004"] = {
"name": "赵六",
"age": 22,
"grades": {"数学": 85, "语文": 90, "英语": 88}
}
# 修改嵌套字典的值
students["001"]["grades"]["语文"] = 88
# 遍历嵌套字典
print("所有学生信息:")
for student_id, info in students.items():
print(f"学号: {student_id}")
print(f" 姓名: {info['name']}")
print(f" 年龄: {info['age']}")
print(" 成绩:")
for subject, grade in info["grades"].items():
print(f" {subject}: {grade}")
print()
3.2 字典推导式
# 基本字典推导式
numbers = [1, 2, 3, 4, 5]
# 创建键为数字,值为数字平方的字典
squares = {x: x**2 for x in numbers}
print("平方字典:", squares)
# 带条件的字典推导式
# 只保留偶数的平方
even_squares = {x: x**2 for x in numbers if x % 2 == 0}
print("偶数平方字典:", even_squares)
# 转换现有字典
fruit_prices = {"apple": 0.5, "banana": 0.25, "orange": 0.75, "grape": 1.2}
# 将所有价格提高10%
increased_prices = {fruit: price*1.1 for fruit, price in fruit_prices.items()}
print("涨价后的水果价格:", increased_prices)
# 键值互换
# 注意:如果值有重复,后面的键会覆盖前面的
prices_fruit = {price: fruit for fruit, price in fruit_prices.items()}
print("价格-水果映射:", prices_fruit)
# 复杂推导式示例
text = "hello world this is a python dictionary comprehension example"
# 创建单词长度字典
word_lengths = {word: len(word) for word in text.split()}
print("单词长度字典:", word_lengths)
3.3 字典与JSON数据转换
import json
# 创建嵌套字典
company = {
"name": "科技公司",
"employees": [
{"id": 1, "name": "张三", "department": "研发", "salary": 15000},
{"id": 2, "name": "李四", "department": "市场", "salary": 12000},
{"id": 3, "name": "王五", "department": "财务", "salary": 13000}
],
"locations": ["北京", "上海", "深圳"],
"founded": 2010
}
# 将字典转换为JSON字符串
json_str = json.dumps(company, ensure_ascii=False, indent=2)
print("JSON字符串:")
print(json_str)
# 将JSON字符串保存到文件
with open("company.json", "w", encoding="utf-8") as f:
json.dump(company, f, ensure_ascii=False, indent=2)
# 从JSON文件读取并转换为字典
with open("company.json", "r", encoding="utf-8") as f:
company_from_json = json.load(f)
print("从JSON读取的字典:")
print(company_from_json)
# 访问从JSON读取的数据
print("公司名称:", company_from_json["name"])
print("第一个员工:", company_from_json["employees"][0]["name"])
3.4 有序字典和默认字典
from collections import OrderedDict, defaultdict
# 有序字典 OrderedDict
# 保持元素插入的顺序(Python 3.7+普通字典也保持顺序,但OrderedDict有额外功能)
ordered_fruits = OrderedDict()
ordered_fruits["apple"] = 5
ordered_fruits["banana"] = 3
ordered_fruits["orange"] = 8
ordered_fruits["grape"] = 4
print("有序字典:")
for fruit, quantity in ordered_fruits.items():
print(f"{fruit}: {quantity}")
# 移动元素到末尾
ordered_fruits.move_to_end("apple")
print("移动apple到末尾后:", dict(ordered_fruits))
# 默认字典 defaultdict
# 为不存在的键提供默认值
word_count = defaultdict(int) # 默认值为0
text = "apple banana apple orange banana apple"
for word in text.split():
word_count[word] += 1
print("单词计数:", dict(word_count))
# 使用lambda设置默认值
def default_value():
return {"count": 0, "length": 0}
word_stats = defaultdict(default_value)
for word in text.split():
word_stats[word]["count"] += 1
word_stats[word]["length"] = len(word)
print("单词统计:", dict(word_stats))
本文体系涵盖了Python字典从基础到高级的所有重要概念,并通过丰富的代码示例和实际案例帮助大家深入理解和掌握字典的使用。