1 定义
字典 (Dictionary) 是用于存储键值对 (key-value pairs) 的数据类型。 字典是可变的,键必须是唯一的且不可变的 (例如字符串、数字或元组),值可以是任意类型。
可以使用花括号 {} 或 dict() 函数创建字典。
代码:
# 创建字典
dict1 = {"name": "Alice", "age": 30, "city": "New York"}
dict2 = dict([("name", "Bob"), ("age", 25)]) # 使用键值对列表创建
print(f"字典1: {dict1}, 字典2: {dict2}")
结果:
2 访问元素
可以通过键来访问字典中的值
代码:
# 访问元素
print(f"姓名: {dict1['name']}, 年龄: {dict1['age']}")
结果:
3 添加/修改元素
可以通过键来添加新的键值对,或者修改已存在的键值对。
代码:
# 添加/修改元素
dict1["gender"] = "Female" # 添加新的键值对
dict1["age"] = 31 # 修改已存在的键值对
print(f"添加/修改元素后的字典1: {dict1}")
结果:
4 删除元素
del:删除指定键的键值对。
pop():删除指定键的键值对,并返回对应的值。
clear():清空字典中的所有键值对。
代码:
# 删除元素
del dict1["city"] # 删除键 "city"
print(f"del删除元素后的字典1: {dict1}")
age = dict1.pop("age") # 删除键 "age" 并返回对应的值
print(f"pop删除元素后的字典1: {dict1}, 删除的年龄: {age}")
dict1.clear() # 清空字典
print(f"clear清空后的字典1: {dict1}")
结果:
5 常用方法
keys():返回字典中所有键的集合。
values():返回字典中所有值的集合。
items():返回字典中所有键值对的集合,每个键值对表示为一个元组。
get():根据键获取值,如果键不存在,返回指定的默认值 (默认为 None),避免 KeyError 异常。
代码:
# 常用方法
dict2 = {"name": "Bob", "age": 25, "city": "London"}
print(f"所有键: {dict2.keys()}")
print(f"所有值: {dict2.values()}")
print(f"所有键值对: {dict2.items()}")
print(f"获取姓名: {dict2.get('name')}, 获取性别(不存在): {dict2.get('gender', 'Unknown')}") # 使用 get() 方法避免 KeyError
结果:
6 字典推导式
代码:
# 字典推导式
squares = {x: x**2 for x in range(5)} # 创建 0-4 的平方字典
print(f"0-4的平方字典: {squares}")
结果:
7 案例
①根据某个条件筛选字典中的键值对
代码:
#根据某个条件筛选字典中的键值对
def filter_dict(d, min_age):
"""
筛选年龄大于 min_age 的人.
Args:
d: 待筛选的字典.
min_age: 最小年龄.
Returns:
筛选后的字典.
"""
return {name: age for name, age in d.items() if age > min_age}
people = {"Alice": 30, "Bob": 25, "Charlie": 40, "David": 20}
print(f"筛选年龄大于28的人: {filter_dict(people, 28)}")
结果:
②统计单词出现的频率
代码:
#统计单词出现的频率
def word_frequency(text):
"""
统计单词出现的频率.
Args:
text: 文本字符串.
Returns:
单词频率字典.
"""
words = text.lower().split() # 转换为小写并分割成单词列表
frequency = {}
for word in words:
frequency[word] = frequency.get(word, 0) + 1 # 使用 get() 方法
return frequency
text = "This is a test. This is only a test."
print(f"单词频率: {word_frequency(text)}")
结果:
③实现一个简单的缓存
代码:
#实现一个简单的缓存
cache = {} # 使用字典作为缓存
def expensive_function(n):
"""
模拟一个耗时的函数.
Args:
n: 输入参数.
Returns:
耗时的计算结果.
"""
if n in cache: # 检查缓存
print(f"从缓存中获取结果: {n}")
return cache[n]
else:
print(f"计算结果: {n}")
result = n * 2 # 模拟耗时计算
cache[n] = result # 存储到缓存
return result
print(expensive_function(5))
print(expensive_function(5)) # 从缓存中获取
print(expensive_function(10))
结果:
7 应用场景
- 存储配置信息
- 缓存数据
- Web 开发 (例如存储用户信息)
- 数据分析 (例如统计词频)
- 表示 JSON 数据