在 Python 中,字典(dict)是一种无序的、可变的集合类型,主要用于存储键值对(key-value pairs)。每个键(key)与一个值(value)相关联,字典的键必须是唯一的,并且是不可变的(如字符串、数字、元组等)。字典的值可以是任意类型,并且可以重复。
1. 创建字典
字典可以通过花括号 {} 或 dict() 函数来创建,键值对之间用冒号 : 分隔,键值对之间用逗号分隔。
示例:
# 使用花括号创建字典
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
print(person) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 使用 dict() 创建字典
person2 = dict(name="Bob", age=30, city="Los Angeles")
print(person2) # 输出: {'name': 'Bob', 'age': 30, 'city': 'Los Angeles'}
2. 访问字典元素
字典通过键来访问对应的值。可以使用 [] 访问字典中的元素。
示例:
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 使用键访问值
print(person["name"]) # 输出: Alice
print(person["age"]) # 输出: 25
如果键不存在,访问时会抛出 KeyError。为了避免这种错误,可以使用 get() 方法,它会在键不存在时返回 None 或指定的默认值。
示例:
print(person.get("city")) # 输出: New York
print(person.get("address")) # 输出: None(键不存在)
print(person.get("address", "Unknown")) # 输出: Unknown(指定默认值)
3. 修改字典元素
字典是可变的,你可以修改字典中的值。直接通过键来修改对应的值。
示例:
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 修改字典中的值
person["age"] = 26
person["city"] = "San Francisco"
print(person) # 输出: {'name': 'Alice', 'age': 26, 'city': 'San Francisco'}
4. 添加新元素
如果键不存在,可以通过指定键和值来添加新的键值对。
示例:
person = {
"name": "Alice",
"age": 25
}
# 添加新键值对
person["city"] = "New York"
print(person) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}
5. 删除字典元素
可以使用 del 语句或 pop() 方法删除字典中的元素。pop() 方法会返回删除的元素。
示例:
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 使用 del 删除元素
del person["city"]
print(person) # 输出: {'name': 'Alice', 'age': 25}
# 使用 pop() 删除并返回值
removed_value = person.pop("age")
print(removed_value) # 输出: 25
print(person) # 输出: {'name': 'Alice'}
如果删除的键不存在,del 会抛出 KeyError,而 pop() 方法可以接受一个默认值参数,用于处理键不存在的情况。
6. 字典的常用方法
Python 字典提供了很多有用的方法来操作键值对。
6.1 keys() - 返回所有键的列表
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
keys = person.keys()
print(keys) # 输出: dict_keys(['name', 'age', 'city'])
6.2 values() - 返回所有值的列表
values = person.values()
print(values) # 输出: dict_values(['Alice', 25, 'New York'])
6.3 items() - 返回字典的所有键值对元组列表
items = person.items()
print(items) # 输出: dict_items([('name', 'Alice'), ('age', 25), ('city', 'New York')])
6.4 update() - 更新字典,将另一个字典或键值对添加到当前字典中
person = {
"name": "Alice",
"age": 25
}
# 使用另一个字典更新
person.update({"city": "New York", "age": 26})
print(person) # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York'}
# 使用键值对更新
person.update(address="123 Main St")
print(person) # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York', 'address': '123 Main St'}
6.5 clear() - 清空字典
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
person.clear()
print(person) # 输出: {}
7. 字典推导式
字典推导式是一种通过表达式来创建字典的简洁方法。它的语法与列表推导式类似,但生成的是字典。
示例:
# 创建一个字典,键为 1-5,值为它们的平方
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 只保留偶数键的字典
even_squares = {x: x ** 2 for x in range(1, 6) if x % 2 == 0}
print(even_squares) # 输出: {2: 4, 4: 16}
8. 字典的排序
虽然字典本身是无序的,但可以通过 sorted() 函数对字典的键或值进行排序。返回的将是一个排序后的列表(而非字典),可以通过排序的键或值创建新的字典。
示例:
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 按字典的键排序
sorted_keys = sorted(person.keys())
print(sorted_keys) # 输出: ['age', 'city', 'name']
# 按字典的值排序
sorted_by_value = sorted(person.items(), key=lambda x: x[1])
print(sorted_by_value) # 输出: [('age', 25), ('city', 'New York'), ('name', 'Alice')]
9. 字典的内存效率与性能
字典是一种非常高效的数据结构,具有以下特点:
查找操作:通过键查找值的时间复杂度为 O(1),这使得字典在查找和更新数据时非常高效。
插入和删除操作:插入和删除键值对的时间复杂度平均为 O(1)。
10. 字典与列表的区别
-
字典存储键值对,列表存储单一值。
-
字典是无序的,而列表是有序的(从 Python 3.7 开始,字典保持插入顺序)。
-
字典的键必须是不可变类型(如字符串、数字、元组),而列表的元素可以是任意类型。
-
总结
-
字典(dict)是一种由键值对组成的数据结构,适用于快速查找和修改数据。
-
字典中的键必须是唯一且不可变的,值可以是任意类型。
-
字典提供了丰富的方法来访问、更新、删除和操作数据。
-
字典推导式使得创建字典变得更加简洁和高效。