什么是字典
字典(Dictionary)是Python中的一种内置数据结构,用于存储键值对(key-value pair)。字典的特点是通过键来快速查找值,键必须是唯一的,而值可以是任何数据类型。字典在其他编程语言中通常被称为哈希表或关联数组。
字典使用花括号 {}
括起来,键值对之间用逗号 ,
分隔,每个键和值之间用冒号 :
分隔。例如:
my_dict = {
'name': 'John',
'age': 25,
'city': 'New York'
}
创建字典
创建字典的方法有多种,可以使用花括号 {}
或 dict()
函数。
使用花括号创建字典
# 创建一个空字典
empty_dict = {}
# 创建一个带有初始键值对的字典
person = {
'name': 'Alice',
'age': 30,
'city': 'Seattle'
}
使用 dict()
函数创建字典
# 创建一个空字典
empty_dict = dict()
# 使用关键字参数创建字典
person = dict(name='Bob', age=25, city='San Francisco')
# 从键值对的列表创建字典
person = dict([('name', 'Carol'), ('age', 22), ('city', 'Chicago')])
访问字典元素
可以通过键来访问字典中的值。如果键不存在,会引发 KeyError
。
person = {
'name': 'David',
'age': 28,
'city': 'Los Angeles'
}
# 通过键访问值
print(person['name']) # 输出 'David'
# 使用 get() 方法访问值,若键不存在则返回 None 或指定的默认值
print(person.get('age')) # 输出 28
print(person.get('gender')) # 输出 None
print(person.get('gender', 'Unknown')) # 输出 'Unknown'
修改字典元素
可以通过键修改字典中的值,如果键不存在,则会添加新的键值对。
person = {
'name': 'Eve',
'age': 35,
'city': 'Boston'
}
# 修改已有键的值
person['age'] = 36
print(person) # 输出 {'name': 'Eve', 'age': 36, 'city': 'Boston'}
# 添加新的键值对
person['gender'] = 'Female'
print(person) # 输出 {'name': 'Eve', 'age': 36, 'city': 'Boston', 'gender': 'Female'}
删除字典元素
可以使用 del
语句或 pop()
方法删除字典中的键值对。
person = {
'name': 'Frank',
'age': 40,
'city': 'Denver'
}
# 使用 del 删除键值对
del person['city']
print(person) # 输出 {'name': 'Frank', 'age': 40}
# 使用 pop() 方法删除键值对并返回被删除的值
age = person.pop('age')
print(age) # 输出 40
print(person) # 输出 {'name': 'Frank'}
字典的常用操作
获取字典的键、值和键值对
可以使用 keys()
、values()
和 items()
方法分别获取字典的键、值和键值对。
person = {
'name': 'Grace',
'age': 29,
'city': 'Houston'
}
# 获取所有键
keys = person.keys()
print(keys) # 输出 dict_keys(['name', 'age', 'city'])
# 获取所有值
values = person.values()
print(values) # 输出 dict_values(['Grace', 29, 'Houston'])
# 获取所有键值对
items = person.items()
print(items) # 输出 dict_items([('name', 'Grace'), ('age', 29), ('city', 'Houston')])
遍历字典
可以使用 for
循环遍历字典的键、值或键值对。
person = {
'name': 'Hank',
'age': 45,
'city': 'Miami'
}
# 遍历字典的键
for key in person:
print(key, person[key])
# 遍历字典的键和值
for key, value in person.items():
print(key, value)
合并字典
可以使用 update()
方法将一个字典的键值对更新到另一个字典中。如果键已存在,则更新其值;如果键不存在,则添加新的键值对。
dict1 = {'name': 'Ivy', 'age': 32}
dict2 = {'city': 'Atlanta', 'age': 33}
# 使用 update() 方法合并字典
dict1.update(dict2)
print(dict1) # 输出 {'name': 'Ivy', 'age': 33, 'city': 'Atlanta'}
字典的高级操作
字典推导式
字典推导式是一种简洁的创建字典的方法,类似于列表推导式。语法为 {key: value for item in iterable}
。
# 创建一个平方字典
squares = {x: x**2 for x in range(6)}
print(squares) # 输出 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 过滤字典中的元素
person = {'name': 'Jack', 'age': 50, 'city': 'Seattle', 'country': 'USA'}
filtered_dict = {k: v for k, v in person.items() if k != 'age'}
print(filtered_dict) # 输出 {'name': 'Jack', 'city': 'Seattle', 'country': 'USA'}
嵌套字典
字典可以包含其他字典作为其值,这使得字典可以用于表示更复杂的数据结构。
# 嵌套字典示例
students = {
'John': {'age': 20, 'major': 'Computer Science'},
'Alice': {'age': 22, 'major': 'Mathematics'},
'Bob': {'age': 21, 'major': 'Physics'}
}
# 访问嵌套字典中的元素
print(students['Alice']['major']) # 输出 'Mathematics'
# 添加新的嵌套字典
students['Eve'] = {'age': 23, 'major': 'Biology'}
print(students)
字典的实际应用
统计字符出现次数
字典可以用于统计字符串中每个字符出现的次数。
text = "hello world"
# 统计字符出现次数
char_count = {}
for char in text:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
print(char_count) # 输出 {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
存储和查询配置参数
字典可以用于存储和查询应用程序的配置参数。
# 配置参数字典
config = {
'host': 'localhost',
'port': 8080,
'debug': True
}
# 访问配置参数
print(config['host']) # 输出 'localhost'
print(config['port']) # 输出 8080
# 修改配置参数
config['debug'] = False
print(config) # 输出 {'host': 'localhost', 'port': 8080, 'debug': False}
将字典转换为JSON
在处理API请求或响应时,通常需要将字典转换为JSON格式,可以使用 json
模块实现。
import json
# 字典
person = {
'name': 'Kate',
'age': 27,
'city': 'San Diego'
}
# 将字典转换为JSON字符串
person_json = json.dumps(person)
print(person_json) # 输出 '{"name": "Kate", "age": 27, "city": "San Diego"}'
# 将JSON字符串转换为字典
person_dict = json.loads(person_json)
print(person_dict) # 输出 {'name': 'Kate', 'age': 27, 'city': 'San Diego'}
字典的注意事项
- 键必须是可哈希的:字典的键必须是不可变类型,如字符串、数字、元组等。列表、字典等可变类型不能作为字典的键。
- 字典是无序的:在Python 3.7之前,字典是无序的。从Python 3.7开始,字典的插入顺序被保留,但不应依赖于此特性。
- 字典的性能:字典的查找、插入和删除操作在平均情况下都是O(1)时间复杂度,但最坏情况下可能会退化为O(n)。
字典是Python中强大且灵活的数据结构,适用于需要快速查找、插入和删除操作的场景。通过对字典的创建、访问、修改、删除等基本操作的理解,以及高级操作如字典推导式和嵌套字典的应用,可以更好地利用字典处理复杂的数据结构和实现高效的算法。