1. 引言
Python 的字典(dict
)是一种内建的数据结构,它存储的是键值对(key-value)的映射关系。字典的元素是无序的、可变的,可以高效地根据键进行查找。字典通常用于存储和处理具有映射关系的数据,如学生成绩、用户信息等。
2. 字典的定义与创建
字典是通过花括号 {}
来定义的,键和值通过冒号 :
分隔,多个键值对之间用逗号 ,
分隔。
示例:
# 创建一个字典
my_dict = {'name': 'Alice', 'age': 25, 'job': 'Engineer'}
print(my_dict) # 输出: {'name': 'Alice', 'age': 25, 'job': 'Engineer'}
# 使用 `dict()` 函数创建字典
my_dict2 = dict(name='Bob', age=30, job='Doctor')
print(my_dict2) # 输出: {'name': 'Bob', 'age': 30, 'job': 'Doctor'}
3. 字典的基本操作
3.1 访问字典元素
字典通过键来访问对应的值。如果键不存在,会抛出 KeyError
。
my_dict = {'name': 'Alice', 'age': 25, 'job': 'Engineer'}
# 访问元素
print(my_dict['name']) # 输出: Alice
# 键不存在会抛出 KeyError
# print(my_dict['address']) # 会报错: KeyError
3.2 使用 get()
方法访问
get()
方法可以安全地访问字典元素。如果键不存在,它不会抛出异常,而是返回 None
或者指定的默认值。
print(my_dict.get('name')) # 输出: Alice
print(my_dict.get('address', 'Unknown')) # 输出: Unknown
3.3 添加或更新元素
字典中的值是可变的,既可以修改现有的键值对,也可以新增键值对。
my_dict['address'] = '123 Street' # 新增键值对
my_dict['age'] = 26 # 更新已有键的值
print(my_dict)
# 输出: {'name': 'Alice', 'age': 26, 'job': 'Engineer', 'address': '123 Street'}
3.4 删除元素
可以使用 del
语句或者 pop()
方法删除字典中的键值对。
# 使用 del 删除元素
del my_dict['address']
print(my_dict) # 输出: {'name': 'Alice', 'age': 26, 'job': 'Engineer'}
# 使用 pop 删除元素并获取其值
age = my_dict.pop('age')
print(age) # 输出: 26
print(my_dict) # 输出: {'name': 'Alice', 'job': 'Engineer'}
4. 字典的方法
方法 | 说明 | 示例 |
---|---|---|
keys() | 返回字典的所有键 | my_dict.keys() 返回 dict_keys(['name', 'age', 'job']) |
values() | 返回字典的所有值 | my_dict.values() 返回 dict_values(['Alice', 25, 'Engineer']) |
items() | 返回字典的所有键值对(元组形式) | my_dict.items() 返回 dict_items([('name', 'Alice'), ('age', 25), ('job', 'Engineer')]) |
clear() | 清空字典 | my_dict.clear() |
update() | 用另一个字典更新当前字典 | my_dict.update({'address': '123 Street'}) |
popitem() | 删除并返回字典中的最后一项 | my_dict.popitem() |
示例:
my_dict = {'name': 'Alice', 'age': 25, 'job': 'Engineer'}
# 获取所有键
print(my_dict.keys()) # 输出: dict_keys(['name', 'age', 'job'])
# 获取所有值
print(my_dict.values()) # 输出: dict_values(['Alice', 25, 'Engineer'])
# 获取所有键值对
print(my_dict.items()) # 输出: dict_items([('name', 'Alice'), ('age', 25), ('job', 'Engineer')])
# 更新字典
my_dict.update({'address': '123 Street'})
print(my_dict) # 输出: {'name': 'Alice', 'age': 25, 'job': 'Engineer', 'address': '123 Street'}
5. 字典的遍历
5.1 遍历字典的键
可以使用 for
循环遍历字典中的键。
for key in my_dict:
print(key) # 输出:name age job address
5.2 遍历字典的值
通过 values()
方法遍历字典的值。
for value in my_dict.values():
print(value) # 输出:Alice 25 Engineer 123 Street
5.3 遍历字典的键值对
通过 items()
方法遍历字典的键值对。
for key, value in my_dict.items():
print(f"{key}: {value}")
# 输出:
# name: Alice
# age: 25
# job: Engineer
# address: 123 Street
6. 字典的嵌套
字典支持嵌套,可以将字典作为值存储在另一个字典中,这在表示复杂数据结构时非常有用。
nested_dict = {
'person1': {'name': 'Alice', 'age': 25},
'person2': {'name': 'Bob', 'age': 30}
}
# 访问嵌套字典
print(nested_dict['person1']['name']) # 输出: Alice
print(nested_dict['person2']['age']) # 输出: 30
7. 字典与其他数据结构的对比
特性 | 字典 (Dictionary) | 列表 (List) | 元组 (Tuple) |
---|---|---|---|
存储方式 | 键值对 | 有序元素 | 有序元素 |
可变性 | 可变 | 可变 | 不可变 |
查找效率 | O(1) | O(n) | O(n) |
索引 | 根据键访问 | 根据索引访问 | 根据索引访问 |
字典在查找速度上比列表和元组快,尤其在需要频繁进行键值查询的场景中,它的效率优势更为明显。
8. 字典的常见应用场景
- 存储配置参数:字典常用于存储和读取程序中的配置信息,如数据库配置、应用设置等。
- 计数器:字典用于统计出现次数。例如,统计一段文本中单词出现的次数。
- 映射数据:字典是实现键值对映射关系的理想结构,如存储用户信息、电话号码簿等。
示例:计算文本中单词的出现次数
text = "apple orange apple banana orange apple"
word_count = {}
for word in text.split():
word_count[word] = word_count.get(word, 0) + 1
print(word_count)
# 输出: {'apple': 3, 'orange': 2, 'banana': 1}
9. 结论
字典是 Python 中非常重要的内建数据结构,它以键值对的形式存储数据,支持快速查找。与列表和元组不同,字典是无序的且不可通过索引访问元素,而是通过键来获取对应的值。掌握字典的基本操作和方法,可以帮助你更高效地处理和存储数据。
常见问题解答:
- 字典的键可以是哪些数据类型?
- 字典的键必须是不可变类型(如字符串、数字、元组),可以是任何哈希值的对象。
- 如何避免字典中的键重复?
- 字典的键是唯一的,如果使用相同的键再次添加值,会更新原有键对应的值,而不是增加新的键值对。
🚀 练习一下! 现在你已经学会了字典的基本操作,试着在实际编程中使用字典来存储和查找数据吧!
发表回复