欢迎来到《10天学会Python》第6天!今天学习字典——Python中最实用的数据结构,像是现实中的“通讯录”,通过名字(键)快速找到电话(值)。
核心概念
字典是键值对(Key-Value Pair) 的映射容器,通过唯一的键快速查找对应的值。就像通讯录中通过名字找电话一样高效。
python
# 创建字典示例
student = {"name": "小明", "age": 18, "major": "计算机"}
重要特性:
- 唯一键:每个键在字典中唯一
- 高效查找:通过键查找值速度极快
- 可变容器:可随时增删改键值对
- 无序性:不要依赖元素的顺序
创建字典的三种方法
1. 直接创建(最常用)
python
contacts = {"张三": "13800138000", "李四": "13900139000"}
prices = {"苹果": 8.5, "香蕉": 6.0}
2. 使用dict()函数
python
student = dict(name="小明", age=18, major="计算机")
items = [("name", "小红"), ("age", 19)]
student2 = dict(items)
3. 字典推导式
python
squares = {x: x**2 for x in range(1, 11)}
fruits = {"苹果": 8.5, "香蕉": 6.0, "橙子": 9.0}
expensive = {name: price for name, price in fruits.items() if price > 8}
常用操作详解
访问值
python
student = {"name": "小明", "age": 18}
name = student["name"] # "小明"
age = student.get("age") # 18
grade = student.get("grade", "未设置") # "未设置"
添加和修改
字典添加和修改使用相同语法,如果键不存在则添加,存在则修改:
python
student = {"name": "小明"}
student["age"] = 18 # 添加新键值对
student["age"] = 19 # 修改已有键的值
# update()批量更新,可以合并多个字典
student.update({"city": "北京", "grade": "大一"})
注意:键可以是字符串、数字、元组(不可变类型),但不能是列表、字典等可变类型。
删除键值对
删除操作有三种方式,根据需求选择:
python
student = {"name": "小明", "age": 18, "major": "计算机"}
# del语句:直接删除,键不存在会报错
del student["age"]
# pop():删除并返回值,可指定默认值避免错误
name = student.pop("name") # 返回"小明"
grade = student.pop("grade", "未设置") # 键不存在时返回默认值
# clear():清空整个字典
student.clear() # 变为{}
建议:不确定键是否存在时,使用 pop(key, default)更安全。
常用字典方法
获取键、值、键值对
这些方法返回的是视图对象,可以动态反映字典变化:
python
student = {"name": "小明", "age": 18, "major": "计算机"}
# keys():所有键
keys = student.keys() # dict_keys(['name', 'age', 'major'])
key_list = list(keys) # 转换为列表
# values():所有值
values = student.values() # dict_values(['小明', 18, '计算机'])
# items():所有键值对,常用于遍历
items = student.items() # dict_items([('name', '小明'), ('age', 18), ('major', '计算机')])
# 遍历字典的标准方式
for key, value in student.items():
print(f"{key}: {value}")
setdefault()智能设置
python
student = {"name": "小明", "age": 18}
grade = student.setdefault("grade", "大一") # 设置"大一"并返回
age = student.setdefault("age", 20) # 返回现有值18
代码示例(5个生活场景)
示例1:智能通讯录
python
contacts = {
"张三": {"phone": "13800138000", "group": "同事"},
"李四": {"phone": "13900139000", "group": "朋友"}
}
name = input("请输入联系人姓名:")
if name in contacts:
print(f"📞 {name}: {contacts[name]['phone']}")
else:
print("❌ 联系人不存在")
示例2:单词频率统计
python
text = "Python是一种简单易学功能强大的编程语言Python语言适合初学者学习"
words = text.split()
word_count = {}
for word in words:
word_count[word] = word_count.get(word, 0) + 1
print(word_count)
示例3:学生成绩管理
python
students = {
"小明": {"数学": 85, "英语": 92, "Python": 88},
"小红": {"数学": 90, "英语": 88, "Python": 95}
}
for name, scores in students.items():
avg = sum(scores.values()) / len(scores)
students[name]["平均分"] = round(avg, 1)
print(students)
示例4:商品库存系统
python
inventory = {
"苹果": {"price": 8.5, "stock": 100},
"香蕉": {"price": 6.0, "stock": 150}
}
def buy_product(name, quantity):
if name in inventory:
item = inventory[name]
if item["stock"] >= quantity:
item["stock"] -= quantity
return item["price"] * quantity
return 0
cost = buy_product("苹果", 3)
print(f"花费:{cost}元")
示例5:多级字典配置
python
app_config = {
"database": {"host": "localhost", "port": 3306},
"server": {"port": 8000, "debug": True}
}
db_host = app_config["database"]["host"] # "localhost"
debug_mode = app_config["server"]["debug"] # True
实践应用:个人单词本
用字典管理个人单词本,实现添加和查找功能:
python
word_book = {
"python": {"meaning": "蟒蛇;Python编程语言"},
"variable": {"meaning": "变量"}
}
def add_word(word, meaning):
word_book[word] = {"meaning": meaning}
print(f"✅ 已添加:{word}")
def find_word(word):
info = word_book.get(word)
if info:
print(f"📖 {word}: {info['meaning']}")
else:
print(f"❌ 未找到")
add_word("list", "列表")
find_word("python")
练习题
练习1:基础操作
创建字典 student = {"name": "小明", "age": 18, "score": 85}:
- 获取并打印姓名和年龄
- 添加新键值对
"major": "计算机" - 将分数改为90分
- 删除年龄键值对
- 使用
get()尝试获取"grade",默认值"未设置"
练习2:通讯录管理系统
设计通讯录程序,功能:
- 添加联系人(姓名、电话、分组)
- 查找联系人
- 删除联系人
- 显示所有联系人
- 统计各分组人数
练习3:单词分析器
输入英文文本,完成:
- 统计每个单词出现次数
- 找出频率最高的3个单词
- 计算单词平均长度
- 统计以'a'开头的单词数量
- 创建字典,键为单词长度,值为该长度单词列表
总结
字典是Python中最强大的数据结构,核心是键值对映射,适合快速查找和更新。掌握字典能处理真实世界复杂数据。
明天学习字符串操作!
学习建议:多用字典解决实际问题。