本文目录导读:

我们来详细讲解一下如何在Python案例中使用字典(Dictionary),字典是Python中非常灵活、强大的内置数据结构,用于存储键值对(key-value pairs)。
我们先从基础概念开始,然后通过几个实际案例来演示它的用法。
什么是Python字典?
- 定义:字典用花括号 表示,内部包含一系列用逗号分隔的键值对。
- 键(Key):必须是唯一且不可变的数据类型(如字符串、数字、元组),它们是字典的“索引”。
- 值(Value):可以是任何数据类型(数字、字符串、列表、甚至另一个字典)。
- 特点:无序(Python 3.7+ 之后会保持插入顺序,但不应依赖顺序进行逻辑操作)、可变、查找速度快(基于哈希表)。
基本示例:
# 创建一个字典
student = {
"name": "Alice",
"age": 20,
"grades": [85, 92, 78],
"is_active": True
}
print(student["name"]) # 输出: Alice
print(student["grades"]) # 输出: [85, 92, 78]
字典的核心用法(增删改查)
1 访问值
- 直接通过键名:
dict_name[key]。- 如果键不存在,会引发
KeyError错误。
- 如果键不存在,会引发
get()方法(推荐):dict_name.get(key, default_value)。- 如果键不存在,返回
None或你指定的默认值,不会报错。
- 如果键不存在,返回
phone_book = {"Alice": "123", "Bob": "456"}
# 方式1:直接访问
print(phone_book["Alice"]) # 输出: 123
# print(phone_book["Charlie"]) # KeyError!
# 方式2:使用get() 安全访问
print(phone_book.get("Charlie")) # 输出: None
print(phone_book.get("Charlie", "未找到")) # 输出: 未找到
2 添加/修改键值对
- 添加:直接给一个新键赋值:
dict_name[new_key] = new_value。 - 修改:给一个已存在的键赋值:
dict_name[existing_key] = new_value。
inventory = {"apples": 10, "bananas": 5}
# 添加新商品
inventory["oranges"] = 8
print(inventory) # 输出: {'apples': 10, 'bananas': 5, 'oranges': 8}
# 修改现有商品数量
inventory["apples"] = 25
print(inventory) # 输出: {'apples': 25, 'bananas': 5, 'oranges': 8}
3 删除键值对
del dict_name[key]:删除指定键,如果键不存在,会引发KeyError。dict_name.pop(key, default):删除指定键并返回其值,如果键不存在,返回默认值(避免错误)。dict_name.clear():清空整个字典。
grades = {"Math": 90, "English": 85, "Science": 95}
# 使用 del 删除
del grades["English"]
print(grades) # 输出: {'Math': 90, 'Science': 95}
# 使用 pop 删除并获取值
removed_value = grades.pop("Math", "N/A")
print(f"删除的值是: {removed_value}") # 输出: 删除的值是: 90
print(grades) # 输出: {'Science': 95}
4 检查键是否存在
- 使用
in关键字:if key in dict_name:。
user_settings = {"theme": "dark", "language": "CN"}
if "theme" in user_settings:
print(f"当前主题是: {user_settings['theme']}")
else:
print("未设置主题")
实战案例:用字典解决实际问题
案例1:学生成绩管理系统(简单版)
场景:管理3个学生的各科成绩,并计算平均分。
students = {
"Alice": {"Math": 90, "English": 85, "Science": 92},
"Bob": {"Math": 78, "English": 80, "Science": 88},
"Charlie": {"Math": 95, "English": 91, "Science": 97}
}
# 1. 查询特定学生的成绩
def get_student_grade(name, subject):
if name in students:
return students[name].get(subject, "该科目不存在")
else:
return "学生不存在"
print(get_student_grade("Alice", "Math")) # 输出: 90
# 2. 计算所有学生的平均分
for student_name, grades in students.items():
total = sum(grades.values())
avg = total / len(grades)
print(f"{student_name} 的平均分是: {avg:.2f}")
# 输出:
# Alice 的平均分是: 89.00
# Bob 的平均分是: 82.00
# Charlie 的平均分是: 94.33
案例2:单词词频统计(案例分析)
场景:输入一段英文文本,统计每个单词出现的次数,这是字典最经典的应用之一。
text = "the quick brown fox jumps over the lazy dog the quick brown fox"
words = text.split() # 将字符串拆分成单词列表
word_count = {} # 创建一个空字典来存储词频
for word in words:
# 核心逻辑:如果单词在字典里,就+1;如果不在,就设置为1
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count)
# 输出: {'the': 3, 'quick': 2, 'brown': 2, 'fox': 2, 'jumps': 1, 'over': 1, 'lazy': 1, 'dog': 1}
# 更Pythonic的写法(使用get方法简化):
word_count2 = {}
for word in words:
word_count2[word] = word_count2.get(word, 0) + 1
print(word_count2) # 结果相同
案例3:JSON数据的读取与处理(真实应用)
场景:处理从API或配置文件返回的JSON数据(JSON结构天然对应Python的字典)。
import json
# 模拟从API获取的JSON字符串(通常API返回的就是字典)
user_data = '''
{
"user_id": 123,
"name": "John Doe",
"is_admin": false,
"preferences": {
"theme": "dark",
"notifications": true,
"language": "en"
},
"login_history": ["2023-01-01", "2023-06-15"]
}
'''
# 将JSON字符串解析为Python字典
user_dict = json.loads(user_data)
# 现在你可以像操作普通字典一样操作它
print(f"用户名: {user_dict['name']}")
print(f"主题偏好: {user_dict['preferences']['theme']}")
# 检查并修改值
if user_dict["is_admin"]:
print("该用户是管理员")
else:
print("普通用户")
# 修改偏好
user_dict["preferences"]["language"] = "CN"
print(json.dumps(user_dict, indent=2)) # 把字典转回JSON字符串,带缩进
案例4:使用字典作为函数参数(**kwargs)
场景:当函数需要接收不确定数量的关键字参数时,可以使用 **kwargs。
def create_profile(name, **kwargs):
"""
创建一个用户配置文件。
除了必须的 name,其他属性通过字典参数传递。
"""
profile = {
"name": name,
"age": kwargs.get("age", "未知"),
"city": kwargs.get("city", "未知"),
"job": kwargs.get("job", "无")
}
return profile
# 调用函数时,可以传入任意关键字参数
user1 = create_profile("Alice")
print(user1) # 输出: {'name': 'Alice', 'age': '未知', 'city': '未知', 'job': '无'}
user2 = create_profile("Bob", age=30, city="Beijing", job="Engineer")
print(user2) # 输出: {'name': 'Bob', 'age': 30, 'city': 'Beijing', 'job': 'Engineer'}
字典的常用方法总结
| 方法 | 说明 | 示例 |
|---|---|---|
dict.keys() |
返回所有键的视图 | phone_book.keys() |
dict.values() |
返回所有值的视图 | phone_book.values() |
dict.items() |
返回所有键值对的视图(元组) | for k, v in dict.items(): |
dict.get(k, d) |
安全获取值 | value = d.get('x', 0) |
dict.pop(k, d) |
删除并返回值 | removed = d.pop('x', None) |
dict.update(d2) |
合并另一个字典 | d1.update(d2) |
dict.setdefault(k, d) |
如果键不存在,插入并返回d | value = d.setdefault('x', []) |
del dict[k] |
删除键 | del d['x'] |
k in dict |
检查键是否存在 | if 'x' in d: |
易错点 & 最佳实践
-
键必须是不可变类型:列表、字典不能作为键,元组可以(如果包含不可变元素)。
-
避免使用
dict作为变量名:这会覆盖内置类型dict()。 -
优先用
get()而不是in+ 组合:get()更简洁、原子化。 -
遍历时不要修改字典大小:如果在循环中需要删除元素,可以创建一个要删除的键的列表,循环结束后再删除。
# 错误示范 # for k in d: # if condition(k): # del d[k] # 会报错或跳过元素 # 正确做法 keys_to_delete = [k for k in d if condition(k)] for k in keys_to_delete: del d[k]
字典是Python中处理结构化的、有标签的数据的首选工具,从配置管理到数据处理,再到构建复杂对象,理解并熟练使用字典是掌握Python的关键一步,希望这些案例对你有帮助!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播